大纲

"""
1 模块
每一个python文件都是一个一个模块
2 包
等价于文件夹(具有一定标识)
具有__init__.py的文件夹就是包
3 分类
- 标准库模块(内置模块): random,math,date,os,
义模块: 自己写的模块
- 第三方模块: django,pandas
的导入
- 包:
内部会有一个python文件: __init__.py(初始化加载)
- import
import 包名
import 包名.模块
import 模块
- from导入
from 包名 import 模块名 [as 别名]
用*代替所有的导入内容
- 动态导入
加载的常见问题
"""
什么是包

具有__init__.py初始化文件的文件夹就是为包
当把包导入运行后,就会什么pycache缓存文件这是init文件初始化的缓存
什么是模块
模块的就是包中的文件

自定义模块
自定义模块的内容

包与模块导入
测试import包名.模块的导入方式
import test_package #直接导入包 会加载init文件,初始化变量
import test_package.Hello #包名.模块
res = test_package.Hello.username
print(res) #测试import 包名.模块,前提要先导入包
测试import 模块的导入方式
import Hello
res2 = Hello.username
print(res2) #测试import 模块,前提是这个模块要跟当前文件
有init文件的文件夹为包,没有的则是普通文件夹里的文件也不能作为模块被导入

import test_package2 #不符合包的概念没有init文件
print(test_package2.Hello.username)
执行后会报以下错误

可以在init文件定义好变量当导入包的时候就会被默认初始化不用再引用模块

import test_package
print(test_package.USERNAME)
from导入
通过from导入可以给模块起别名
from test_package import Hello as he
print(he.passwd)
动态导入
#2 动态导入
#案例: 导入一个模块,当模块发生变化时
import random
print(random.randint(0,100)) #randint也是前包后不包
import math
print(math.pi)
#动态导入1,动态导入将模块名作为变量导入--不推荐
module = ["random","math"]
random1 = __import__(module[0])
print(random1.randint(0,100))
math1 = __import__(module[1])
print(math1.pi)
#动态导入2,
import importlib
math2 = importlib.import_module(module[1])
print(math2.pi)
#3 导入模块的内存问题
import math as m1
import math as m2
import math as m3
print(id(m1))
print(id(m2))
#结果:同一个模块,无论导入多少次别名为什么都是指向同一个内存地址
[!NOTE]
两种动态导入的区别
__import__是 Python 内置函数,语法相对底层importlib.import_module是更推荐的方式(属于标准库),语法更清晰,功能更完善,尤其在处理复杂导入场景(如包内模块)时更可靠
内置模块
math
| 方法 | 说明 |
|---|---|
| ceil | (天花板的意思)向上取整 |
| floor | 向下取整 |
| e | 属性 自然常数 |
| fabs | 求绝对值等价于全局函数abs() |
| fmod | 求模 |
| isnan | 判断是不是一个数字 |
| isfinite | 判断是不是无限 |
| pi | 圆周率 |
| pow() | 幂次方 |
| sqrt | 根号 开平方根 |
查看math用法
import math #先导入函数
#查看math内部函数的用法
#print(help(math))
print(dir(math))
ceil
#1 ceil 向上取整
print(f"ceil:",math.ceil(3.4)) #4
floor
#2 floor 向下取整
print(f"floor:",math.floor(3.4)) #3
e
#3 e 自然常数
print(f"自然常数:",math.e)
fabs
#4 fabs |-5| = 5 取绝对值
print(f"fabs:",math.fabs(-9))
#也可使用内置函数 abs()
print(f"abs:",abs(-9))
pi
print(f"pi: ",math.pi)
fmod
#6 fmod 求模 <==> 取余
print(f"fmod:",math.fmod(5,3)) #5 % 3 = 2
isnan
#7 isnan 判断是否为不是数字,返回布尔值
print(f"判断是否为数字:",math.isnan(float('fjw')))
isfinite
#8 isfinite 判断数是否为无穷大或无穷小
print(f"isfinite:",math.isfinite(1/3))
pow
#9 pow() 计算次方
print(f"pow:",math.pow(10,2))
sqrt
#10 sqrt() 开根号
print(f"sqrt:",math.sqrt(25))
Random
| 方法 | 说明 |
|---|---|
| randint() | 产生随机整数[m,n] |
| random() | 产生一个0~1内的随机数[0,1) random.random()可以乘10取整得到0-9的整数 |
| uniform() | 产生基于正态分布的随机数(一般用不到) |
| range() | 产生一个范围的随机数 |
| choice | 在序列(有序的,set是无序的)中随机筛选一个元素 |
randint,random
import random as rd
#random 表示产生0-1之间随机数字
print(rd.random())
#randint产生范围内的随机整数
print(rd.randint(10,50))
#产生0-100之间的随机整数
print(int(rd.random() * 100))
choice
list2 = ["python","c","java","c++","go"]
print(rd.choice(list2))
案例
#案例: 使用range()产生0-100之间的随机列表,长度为10
list3 = []
for i in range(10):
list3.append(rd.randint(0,100))
print(list3)
list4 = [rd.randint(0,100) for _ in range(10)]
print(list4)
#choices
new_list = rd.choices(range(0,101),k=10) #k=10 抽取10个元素
print(new_list)
OS
OS中译过来为操作系统
| 方法 | 说明 |
|---|---|
| curdir | 获取当前目录标识,返回的是相对路径(绝对路径os.path.abspath(os.curdir)) |
| chmod() | 修改权限 主要用在linux,help(os.chmod) |
| close | 关闭文件路径 |
| cpu_count() | 返回cpu的核心线程数 |
| getcwd() | 获取当前路径,返回的是绝对路径,相当于linux的pwd |
| getpid() | 获取当前线程的进程编号(任务管理器—详细信息) |
| getppid() | 获取当前进程的父进程的进程编号 |
| kill() | 通过进程号杀死进程 |
| linesep | 对应系统下的换行符 |
| listdir() | 返回对应目录下的所有文件及文件夹(隐藏文件也可以调取出来),返回的是列表 |
| makedirs() | 创建目录,支持创建多层目录 |
| mkdir | 创建目录,只支持一层创建,不能创建多层 |
| open | 创建文件,等价于全局函数open(IO流详细讲) |
| pathsep | 获取环境变量的分割符 windows ; linux : |
| sep | 路径的分割符 windows \ linux / |
| remove(文件名或者路径) | 删除文件 |
| removedirs | 移除目录,支持多级删除,递归删除 |
| system | 执行终端命令 |
以下为OS模块部分方法的示例
import os
curdir
#1 获取当前目录标识
print(os.curdir) #. 代表当前目录
cpu_count()
#2 获取cpu的线程数
print(os.cpu_count())
getcwd
#3 获取当前目录的路径
print(os.getcwd())
getpid
#4 获取当前进程pid
print(os.getpid())
getppid
#5 获取当前父进程pid
print(os.getppid())
kill
#6 kill
#print(os.kill(进程号))
listdir
#7 返回对应目录下的所有文件及文件夹
print(os.listdir("E:\\"))
makedirs
#8 创建多层目录
print(os.makedirs("D:\\a\\b\\c"))
mkdir
#9 创建一层目录
print(os.mkdir("D:\\aaa"))
pathsep
#10 获取环境变量的分隔符
print(os.pathsep) #windows下的是;,linux下是:
sep
#11 路径的分割符
print(os.sep) #windows下的是\,linux下是/
removedirs
#12 移除目录,支持多级删除
print(os.removedirs("D:\\a\\b\\c"))
system
#13 执行终端命令
#os.system("cls")
os.path

"""
os.path(重点)
1 路径问题:
路径: 文件在磁盘中的位置
相对路径: 相对当前文件夹的
绝对路径: 从盘符(CDEF)开始
2 路径分割符问题:
\\ 在python中使用路径时,需
/ 反斜杠
3 面试题: \\ / 之间的区别
/ linux系统使用的,windows
\\ windows系统使用的,在代
"""
import os.path as path
#查看函数用法
#print(help(path))
#print(dir(path))
#1 获取当前路径 abspath 相对路径返回绝
print(path.abspath("."))
print(path.abspath("..")) #当前
#2 获取python解释器路径默认分割符
print(path.altsep)
#3 获取某目录某文件/文件夹的名称
file_path = "E:\\A云计算\\20251013pyth
file_path_dir = "E:\\A云计算\\20251013
print(path.basename(file_path))
print(path.basename(file_path_dir))
#4 获取文件所在的目录
print(path.dirname("./test_module/Test
print(path.dirname("./test_module"))
#5 判断文件/文件夹是否存在
print(path.exists(file_path))
print(path.exists(file_path_dir))
#6 获取文件大小
print(path.getsize(file_path)) #1
print(path.getsize(file_path_dir)) #4
#print(path.getsize("D:/a.txt")) #
#7 路径拼接
parent_path = "E:/A云计算/20251013pyth
child_path = "09_package/test_module/T
print(path.join(parent_path,child_path
#8 判断是否是文件
print(path.isfile(path.join(parent_pat
"""
作业: 使用os和os.path以及函数的递归完
给出一个路径,遍历当前路径所有的文件及
打印输出所有的文件(遇到文件输出路径,
"""
import os
def for_file(path1):
for file in os.listdir(path1):
path2 = path.join(path1,file)
if path.isfile(path2):
print(f"文件名: ",{path2})
elif path.isdir(path2):
for_file(path2)
for_file(file_path_dir)
sys

import sys
#1 获取python内部版本号
print(sys.api_version)
#2 获取cpython的版本
print(sys.copyright)
#3 获取默认的编码
print(sys.getdefaultencoding()) #utf-8
print(sys.getfilesystemencoding())
#4 获取递归的最大限制层数
print(sys.getrecursionlimit()) #1000
#5 返回窗口的版本信息
print(sys.getwindowsversion())
print(sys.version)
UUID
uuid模块 --获取一个永不重复的序列
import uuid
#产生一个序列 --永不重复
print(uuid.uuid4())
print(uuid.uuid4().hex)
时间模块
时间模块有time,calendar,datetime
"""
1 时间模块:
操作时间本身 time
操作时间分量计算 calendar
2 时间子模块:
主要设置时间 datetime
"""
这里主要提及time模块

import time
#1 获取当前时间
print(time.asctime())
print(time.ctime())
#2 时间的产生-- 时间戳
"""
1970年1月1日 00:00:00
"""
print(time.time())
#3 localtime()
print(time.localtime())
#4 格式化时间
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
print(time.strftime("%Y-%m-%d"))
print(time.strftime("%H:%M:%S"))
#5 解析时间
date_str = "2025-1-8"
print(time.strptime(date_str,"%Y-%m-%d"))
#6 sleep()
#案例: 计算当前程序运行的时间
start_time = time.time()
#模拟程序5s
time.sleep(5)
end_time = time.time()
print("程序运行的时间: ",end_time - start_time)
import datetime as dt
#设置时间
print(dt.date(2000,1,8)) #设置日期
print(dt.time(20,10,8,213)) #设置时间
print(dt.datetime(2000,1,8,20,10,8)) #设置日期与时间
加密模块
"""
加密模块
加密"zhangsan 123" --加密(算法) --- "sdadsdawdad"
https://www.baidu.com
- 对称加密
对称加密: --加密和解密用的是同一个密钥
非对称加密 --加密和解密使用不同密钥(公钥,私钥)
- 可逆加密(可以解密)和不可逆加密(不可以通过密钥解密)
MD5
hashlib
hmac
"""
以下示例可以看出hashlib与hmac的区别
import hashlib
username = 'zhangsan'
password = "123"
#加密
username_md5 = hashlib.md5(username.encode("utf-8"))
password = hashlib.md5(password.encode("utf-8"))
print(username_md5.hexdigest())
#加盐
"""
盐值 加密的时候加盐值(一段字符串)
"""
slat = "$$%%@@"
username_md5.update(slat.encode("utf-8"))
print(username_md5.hexdigest())
import hmac
res1 = hmac.new(username.encode("utf-8"),slat.encode("utf-8"),"md5").hexdigest()
res2 = hmac.new("123".encode("utf-8"),slat.encode("utf-8"),"md5").hexdigest()
print(res1)
print(res2)
[!NOTE]
hmac可以做到一步完成
案例: 使用加密完成登录验证
#数据库存储的是加密后的用户名和密码
import hashlib
#1 定义函数对传入的字符串进行加密
def encryption(str):
slat = "@@##!!"
res = hashlib.md5(str.encode("utf-8"))
res.update(slat.encode("utf-8"))
return res.hexdigest()
#定义数据库的用户名和密码
username_mysql = encryption("zhangsan")
password_mysql = encryption("123")
print(username_mysql)
#模拟登录的过程
username = input("username: ")
password = input("password: ")
def login(username,password):
return True if encryption(username) == username_mysql and encryption(password) == password_mysql else False
print("登录成功" if login(username,password) else "登录失败")
第三方模块
第三方模块安装
- pip是Python的包管理工具,它用于安装、升级和管理Python包。
- 在Python官方网站上下载并安装Python,pip会随之安装。
查看pip版本

安装模块
pip install requests

升级安装的模块
pip install --upgrade package_name
列出已安装的包
pip list

卸载已安装的包
pip uninstall package_name
常见的第三方模块
常见的第三方模块有很多,以下是其中一些常用的模块及其功能介绍:
requests:用于发送HTTP请求,可以方便地进行网络通信和数据交互。
numpy:提供了高性能的多维数组对象和相关工具,用于进行数值计算和科学计算。
pandas:提供了高效的数据结构和数据分析工具,用于处理和分析大型数据集。
matplotlib:用于绘制各种类型的图表和可视化,支持折线图、散点图、柱状图等多
种图形。
scikit-learn:提供了丰富的机器学习算法和工具,用于数据挖掘和数据分析。
tensorflow:一个开源的机器学习框架,用于构建和训练各种类型的神经网络模型。
flask:一个轻量级的Web框架,用于快速构建Web应用程序。
django:一个功能强大的Web框架,提供了完整的MVC架构和丰富的功能组件。
scrapy:一个用于爬取网站数据的框架,支持高效的异步网络请求和数据解析。
pytorch:一个深度学习框架,提供了动态计算图和丰富的神经网络模型。
这些第三方模块可以大大提高开发效率,同时也提供了丰富的功能和工具,满足了不
同领域的需求。
本文章为学习后的产出笔记与实验记录,谢谢阅读,如有问题及时提出~

2万+

被折叠的 条评论
为什么被折叠?



