在 Python 中,模块(Module) 和 包(Package) 是组织代码的核心机制,用于实现代码复用、模块化管理和避免命名冲突。尤其在大型项目中,合理使用模块和包能显著提升代码的可维护性。
一、模块(Module):单个 Python 文件
模块是一个以 .py 为扩展名的 Python 文件,包含函数、类、变量和可执行代码。简单来说:一个 .py 文件 = 一个模块。
1. 模块的作用
- 代码复用:将常用功能(如工具函数、类)封装到模块中,其他程序可直接导入使用,无需重复编写。
- 模块化管理:将复杂程序拆分为多个模块,每个模块负责单一功能,逻辑更清晰。
- 避免命名冲突:不同模块中可存在同名函数/变量,通过“模块名.成员”的方式访问,避免冲突。
2. 创建模块
创建一个文本文件,命名为 my_module.py(文件名即模块名),写入以下内容:
# my_module.py
# 变量
version = "1.0"
# 函数
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# 类
class Calculator:
def divide(self, a, b):
if b == 0:
return "除数不能为0"
return a / b
这就是一个简单的模块,包含变量、函数和类。
3. 导入模块
使用 import 语句导入模块,然后通过“模块名.成员”的方式使用模块中的内容。常用导入方式有以下几种:
(1)导入整个模块
import my_module # 导入模块
# 使用模块中的成员(变量、函数、类)
print(my_module.version) # 访问变量 → "1.0"
print(my_module.add(2, 3)) # 调用函数 → 5
calc = my_module.Calculator() # 创建类实例
print(calc.divide(6, 2)) # 调用类方法 → 3.0
(2)导入模块并指定别名(简化调用)
用 as 给模块起别名,适合模块名较长的场景:
import my_module as mm # 别名 mm
print(mm.multiply(3, 4)) # 4 → 12
(3)导入模块中的特定成员
用 from ... import 直接导入模块中的变量、函数或类,可直接使用(无需加模块名):
from my_module import add, Calculator # 只导入 add 函数和 Calculator 类
print(add(5, 5)) # 直接调用 → 10
calc = Calculator()
print(calc.divide(10, 5)) # → 2.0
(4)导入模块中的所有成员(不推荐)
用 from ... import * 导入模块中所有公开成员(不建议,可能导致命名冲突):
from my_module import * # 导入所有公开成员
print(version) # 直接使用变量 → "1.0"
print(multiply(2, 5)) # → 10
4. 模块的执行控制(__name__ 变量)
模块中的代码既可以被导入,也可以直接运行(如作为脚本)。__name__ 变量用于区分这两种场景:
- 当模块被导入时,
__name__的值为模块名(如my_module)。 - 当模块直接运行时,
__name__的值为__main__。
在模块中添加执行控制代码,可让模块既作为工具被导入,又能作为脚本独立运行:
# my_module.py(补充执行控制)
... # 原有变量、函数、类
if __name__ == "__main__":
# 只有当模块直接运行时,才执行以下代码
print("模块直接运行时的测试:")
print(add(1, 1)) # 2
calc = Calculator()
print(calc.divide(4, 2)) # 2.0
- 当直接运行
python my_module.py时,会执行if块内的测试代码。 - 当被其他模块导入时,
if块内的代码不会执行。
二、包(Package):模块的集合
包是一个包含多个模块的目录,且目录中必须有一个 __init__.py 文件(用于标识该目录是 Python 包)。
简单来说:一个带 __init__.py 的目录 = 一个包,用于组织多个相关模块。
1. 包的结构
一个典型的包结构如下(以 my_package 为例):
my_package/ # 包目录
├── __init__.py # 包的初始化文件(必需)
├── module1.py # 模块1
├── module2.py # 模块2
└── subpackage/ # 子包(嵌套包)
├── __init__.py
└── module3.py # 子包中的模块
2. __init__.py 文件的作用
__init__.py 是包的标识文件,可为空,也可包含代码(用于控制包的导入行为):
- 标识作用:告诉 Python 该目录是一个包,否则会被视为普通目录。
- 初始化作用:包被导入时,会自动执行
__init__.py中的代码(如定义包的公开接口)。 - 控制导入:通过
__all__变量指定from package import *时可导入的模块(见下文)。
3. 创建包示例
按上述结构创建包:
- my_package/module1.py:
def func1():
return "这是 module1 的 func1"
my_package/module2.py:
def func2():
return "这是 module2 的 func2"
my_package/__init__.py(为空,或添加__all__):
# 定义 from my_package import * 时可导入的模块
__all__ = ["module1", "module2"] # 仅对 * 导入有效
4. 导入包中的模块
导入包中模块的方式与导入普通模块类似,需指定包的路径:
(1)导入包中的模块
# 导入 my_package 中的 module1
import my_package.module1
print(my_package.module1.func1()) # → "这是 module1 的 func1"
(2)导入包中的模块并指定别名
import my_package.module2 as m2
print(m2.func2()) # → "这是 module2 的 func2"
(3)从包中导入模块中的成员
from my_package.module1 import func1
print(func1()) # → "这是 module1 的 func1"
(4)从包中导入模块(简化路径)
from my_package import module2
print(module2.func2()) # → "这是 module2 的 func2"
(5)导入包中的所有模块(依赖 __init__.py 的 __all__)
from my_package import * # 导入 __all__ 中指定的模块
print(module1.func1()) # → "这是 module1 的 func1"
print(module2.func2()) # → "这是 module2 的 func2"
(6)导入子包中的模块
# 导入子包 subpackage 中的 module3
from my_package.subpackage import module3
# 假设 module3 中有 func3
print(module3.func3())
三、模块的搜索路径
当导入模块时,Python 会按以下顺序在搜索路径中查找模块文件:
1. 当前执行脚本所在的目录(优先)。
2. 系统环境变量 PYTHONPATH 中指定的目录。
3. Python 安装目录中的标准库目录(如 site-packages)。
可通过 sys.path 查看当前搜索路径:
import sys
print(sys.path) # 列表形式,包含所有搜索路径
若自定义模块不在搜索路径中,可临时添加路径:
import sys
sys.path.append("/path/to/your/module/directory") # 添加自定义目录
import my_module # 此时可导入该目录下的模块
四、常用模块类型
1.内置模块:Python 自带的模块(无需安装,直接导入),如 os(文件操作)、sys(系统交互)、math(数学运算)、datetime(时间处理)等。
import math
print(math.sqrt(16)) # → 4.0(计算平方根)
2.第三方模块:由社区开发的模块(需用 pip 安装),如 requests(网络请求)、pandas(数据分析)等。
- 安装:
pip install requests -
使用:
import requests -
自定义模块/包:开发者根据需求自己编写的模块或包(如前文的
my_module和my_package)。
Python常用自带模块
Python 标准库包含大量实用模块,无需额外安装即可使用。以下是最常用的自带模块教程,涵盖核心功能与实用示例:
使用时直接 import 模块名 即可,无需额外安装。如需深入,可通过 help(模块名) 查看完整文档。
一、os 模块:与操作系统交互
功能:处理文件/目录、获取系统信息、执行系统命令等。
常用函数:
os.getcwd():获取当前工作目录os.listdir(path):列出指定路径下的文件/目录os.path:子模块,处理路径(跨平台兼容)os.path.join(a, b):拼接路径(自动处理斜杠)os.path.exists(path):判断路径是否存在os.path.isfile(path):判断是否为文件os.mkdir(path):创建单级目录os.makedirs(path):创建多级目录(如a/b/c)
示例:
import os
# 获取当前目录
print("当前目录:", os.getcwd())
# 拼接路径(跨平台,Windows 用 \,Linux 用 /)
path = os.path.join("data", "logs", "today.txt")
print("拼接路径:", path)
# 检查路径是否存在,不存在则创建
if not os.path.exists(os.path.dirname(path)):
os.makedirs(os.path.dirname(path)) # 创建 data/logs 目录
# 列出当前目录内容
print("当前目录内容:", os.listdir("."))
二、sys 模块:与 Python 解释器交互
功能:获取命令行参数、控制解释器行为、退出程序等。
常用函数:
sys.argv:获取命令行参数(列表,sys.argv[0]是脚本名)sys.version:获取 Python 版本信息sys.exit(code):退出程序(code=0表示正常退出)sys.path:Python 搜索模块的路径列表
示例:
import sys
# 打印命令行参数(运行脚本时:python script.py arg1 arg2)
print("命令行参数:", sys.argv) # 输出:['script.py', 'arg1', 'arg2']
# 打印 Python 版本
print("Python 版本:", sys.version.split()[0]) # 输出:3.10.6
# 若参数不足则退出
if len(sys.argv) < 2:
print("请输入至少一个参数!")
sys.exit(1) # 非 0 表示异常退出
三、datetime 模块:处理日期与时间
功能:生成/解析日期时间、计算时间差、格式化时间等。
核心类:
datetime.datetime:日期+时间(如2023-10-01 15:30:00)datetime.date:仅日期(如2023-10-01)datetime.time:仅时间(如15:30:00)datetime.timedelta:时间差(用于加减日期)
示例:
from datetime import datetime, timedelta
# 获取当前时间
now = datetime.now()
print("当前时间:", now) # 输出:2023-10-01 15:30:00.123456
# 格式化时间为字符串(常用指令:%Y=年,%m=月,%d=日,%H=时,%M=分,%S=秒)
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化时间:", formatted) # 输出:2023-10-01 15:30:00
# 计算 3 天后的日期
future = now + timedelta(days=3)
print("3天后:", future.strftime("%Y-%m-%d")) # 输出:2023-10-04
# 解析字符串为 datetime 对象
str_time = "2023-01-01 10:00:00"
parsed = datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")
print("解析后的时间:", parsed)
四、json 模块:处理 JSON 数据
功能:Python 对象与 JSON 字符串的相互转换(序列化/反序列化)。
常用函数:
json.dumps(obj):Python 对象 → JSON 字符串json.loads(s):JSON 字符串 → Python 对象json.dump(obj, file):Python 对象写入 JSON 文件json.load(file):从 JSON 文件读取 → Python 对象
示例:
import json
# Python 字典(可序列化类型:dict、list、str、int、float、bool、None)
data = {
"name": "小明",
"age": 18,
"hobbies": ["篮球", "编程"],
"is_student": True
}
# 序列化:Python → JSON 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2) # ensure_ascii=False 保留中文
print("JSON 字符串:\n", json_str)
# 反序列化:JSON 字符串 → Python
python_obj = json.loads(json_str)
print("反序列化后:", python_obj["name"]) # 输出:小明
# 写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 读取 JSON 文件
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print("从文件读取:", loaded["hobbies"]) # 输出:['篮球', '编程']
五、re 模块:正则表达式
功能:字符串匹配、查找、替换、分割等(处理复杂文本)。
常用函数:
re.match(pattern, s):从字符串开头匹配(不匹配返回 None)re.search(pattern, s):在整个字符串中找第一个匹配re.findall(pattern, s):返回所有匹配的子串(列表)re.sub(pattern, repl, s):替换匹配的子串
示例:
import re
# 匹配邮箱(简单规则:xxx@xxx.xxx)
email_pattern = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'
emails = ["test@example.com", "invalid-email", "user.name+tag@domain.co"]
for email in emails:
if re.match(email_pattern, email):
print(f"{email} 是有效邮箱")
else:
print(f"{email} 是无效邮箱")
# 提取字符串中的所有数字
text = "今年 25 岁,月薪 15000 元,存款 500000"
numbers = re.findall(r'\d+', text) # \d+ 匹配1个以上数字
print("提取的数字:", numbers) # 输出:['25', '15000', '500000']
# 替换敏感词(用*代替)
sensitive = "垃圾、笨蛋"
text = "这人真是笨蛋,说的都是垃圾"
censored = re.sub(r'垃圾|笨蛋', '*', text)
print("过滤后:", censored) # 输出:这人真是*,说的都是*
六、math 模块:数学运算
功能:提供基础数学函数(比内置运算符更丰富)。
常用函数:
math.pi:圆周率 π(≈3.14159)math.sqrt(x):计算平方根math.sin(x)/math.cos(x):三角函数(参数为弧度)math.floor(x)/math.ceil(x):向下/向上取整math.pow(x, y):计算 x 的 y 次方
示例:
import math
# 计算圆的面积(半径 5)
r = 5
area = math.pi * math.pow(r, 2)
print(f"圆面积:{area:.2f}") # 输出:78.54
# 平方根与取整
print("10的平方根:", math.sqrt(10)) # 输出:3.162...
print("3.7向下取整:", math.floor(3.7)) # 输出:3
print("2.1向上取整:", math.ceil(2.1)) # 输出:3
# 三角函数(30度转弧度:30°×π/180)
rad = 30 * math.pi / 180
print("sin(30°):", math.sin(rad)) # 输出:0.5
七、random 模块:生成随机数
功能:生成随机数、随机选择元素、打乱序列等。
常用函数:
random.random():生成 [0.0, 1.0) 之间的随机浮点数random.randint(a, b):生成 [a, b] 之间的随机整数random.choice(seq):从序列中随机选择一个元素random.shuffle(seq):打乱序列(原地修改)random.sample(seq, k):从序列中随机选 k 个不重复元素
示例:
import random
# 生成随机整数(1-10)
print("随机整数:", random.randint(1, 10))
# 从列表随机选一个元素
fruits = ["苹果", "香蕉", "橙子"]
print("随机水果:", random.choice(fruits))
# 打乱列表
nums = [1, 2, 3, 4, 5]
random.shuffle(nums)
print("打乱后:", nums) # 输出:[3,1,5,2,4](随机)
# 随机选 3 个不重复元素
print("随机抽样:", random.sample(range(10), 3)) # 输出:[5,2,7](随机)
八、collections 模块:扩展数据结构
功能:提供比内置类型(list、dict 等)更强大的数据结构。
常用类:
defaultdict:带默认值的字典(避免 KeyError)deque:双端队列(高效 append/pop 两端元素)Counter:计数工具(统计元素出现次数)
示例:
from collections import defaultdict, deque, Counter
# defaultdict:访问不存在的键时返回默认值(如 list)
dd = defaultdict(list) # 默认值为 list()
dd["hobbies"].append("篮球") # 无需先初始化 list
dd["hobbies"].append("编程")
print(dd["hobbies"]) # 输出:['篮球', '编程']
# deque:双端队列(比 list 更高效的首尾操作)
dq = deque([1, 2, 3])
dq.append(4) # 尾部加元素 → [1,2,3,4]
dq.appendleft(0) # 头部加元素 → [0,1,2,3,4]
dq.pop() # 尾部删 → [0,1,2,3]
dq.popleft() # 头部删 → [1,2,3]
print(dq)
# Counter:统计元素次数
words = ["apple", "banana", "apple", "orange", "apple"]
count = Counter(words)
print(count) # 输出:Counter({'apple': 3, 'banana': 1, 'orange': 1})
print("apple 出现次数:", count["apple"]) # 输出:3
九、itertools 模块:迭代工具
功能:提供高效的迭代器工具(简化循环逻辑)。
常用函数:
itertools.chain(a, b):连接两个迭代器(如 list)itertools.cycle(seq):循环迭代序列(无限迭代)itertools.product(a, b):计算两个序列的笛卡尔积itertools.permutations(seq, k):生成序列中 k 个元素的排列
示例:
import itertools
# chain:连接两个列表
a = [1, 2, 3]
b = ["a", "b"]
for item in itertools.chain(a, b):
print(item, end=" ") # 输出:1 2 3 a b
# product:笛卡尔积(类似嵌套循环)
colors = ["红", "蓝"]
sizes = ["S", "M"]
for c, s in itertools.product(colors, sizes):
print(f"{c}{s}", end=" ") # 输出:红S 红M 蓝S 蓝M
# permutations:3选2的排列
nums = [1, 2, 3]
for p in itertools.permutations(nums, 2):
print(p, end=" ") # 输出:(1,2) (1,3) (2,1) (2,3) (3,1) (3,2)
总结
- 模块:单个
.py文件,封装函数、类、变量,实现代码复用。 - 包:含
__init__.py的目录,组织多个相关模块,支持嵌套(子包)。 - 导入方式:
import、from ... import、as别名,根据需求选择。 - 搜索路径:Python 按固定顺序查找模块,可通过
sys.path调整。
合理使用模块和包是编写可维护代码的基础,尤其在大型项目中,模块化的组织方式能让代码结构清晰、易于扩展。
总结
模块和包在Python中一般对文件和文件夹的称呼。
- 一个py文件就是一个模块(module)。
- 含多个py文件的文件夹就是包(package)。
注意:在包(文件夹)中有一个默认内容为空的__init__.py的文件,一般用于描述当前包的信息(在导入他下面的模块时,也会自动加载)。
- py2必须有,如果没有导入包就会失败。
- py3可有可无。
当定义好一个模块或包之后,如果想要使用其中定义的功能,必须要先导入,然后再能使用。
导入,其实就是将模块或包加载的内存中,以后再去内存中去拿就行。
关于导如时的路径:
在Python内部默认设置了一些路径,导入模块或包时,都会按照指定顺序逐一去特定的路径查找。
PS C:\Users\zj> ipython
Python 3.8.8 (tags/v3.8.8:024d805, Feb 19 2021, 13:18:16) [MSC v.1928 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.28.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import sys
In [2]: sys.path
Out[2]:
['C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\Scripts\\ipython.exe',
'c:\\program files\\python38\\python38.zip',
'c:\\program files\\python38\\DLLs',
'c:\\program files\\python38\\lib',
'c:\\program files\\python38',
'',
'C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\site-packages',
'C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32',
'C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32\\lib',
'C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\site-packages\\Pythonwin',
'c:\\program files\\python38\\lib\\site-packages',
'C:\\Users\\zj\\AppData\\Roaming\\Python\\Python38\\site-packages\\IPython\\extensions',
'C:\\Users\\zj\\.ipython']
想要导入任意的模块和包,都必须写在如下路径下,才能被找到。
也可以自动手动在sys.path中添加指定路径,然后再导入可以,例如:
import sys
sys.path.append("路径A")
import xxxxx # 导入路径A下的一个xxxxx.py文件
- 你以后写模块名称时,千万不能和内置和第三方的同名(新手容易犯错误)。
- 项目执行文件一般都在项目根目录,如果执行文件嵌套的内存目录,就需要自己手动在sys.path中添加路径。
- pycharm中默认会将项目目录加入到sys.path中
关于导入的方式:
导入本质上是将某个文件中的内容先加载到内存中,然后再去内存中拿过来使用。而在Python开发中常用的导入的方式有2类方式,每类方式都也多种情况。
- 第一类:import xxxx(开发中,一般多用于导入sys.path目录下的一个py文件)
- 第二类:from xxx import xxx 【常用】,一般适用于多层嵌套和导入模块中某个成员的情况。
- 提示:基于from模式也可以支持
from many import *,即:导入一个模块中所有的成员(可能会重名,所以用的少)。
导入别名
如果项目中导入 成员/模块/包 有重名,那么后导入的会覆盖之前导入,为了避免这种情况的发生,Python支持重命名,即:
from xxx.xxx import xx as xo
import x1.x2 as pg
主文件
- 执行一个py文件时
__name__ = "__main__"
- 导入一个py文件时
__name__ = "模块名"
我们通常是执行 run.py 去运行程序,其他的py文件都是一些功能代码。当我们去执行一个文件时,文件内部的 __name__变量的值为 __main__
第三方模块
Python内部提供的模块有限,所以在平时在开发的过程中,经常会使用第三方模块。
pip(最常用)
这是Python中最最最常用的安装第三方模块的方式。
pip其实是一个第三方模块包管理工具,默认安装Python解释器时自动会安装,默认目录:
Windows系统,即:Python安装路径的scripts目录下
C:\Python38\Scripts\pip.exe
C:\Python38\Scripts\pip3.exe
C:\Python38\Scripts\pip3.8.exe
提示:为了方便在终端运行pip管理工具,我们也会把它所在的路径添加到系统环境变量中。
pip3 install 模块名称
源码安装
如果要安装的模块在pypi.org中不存在 或 因特殊原因无法通过pip install 安装时,可以直接下载源码,然后基于源码安装,例如:
- 下载requests源码(压缩包zip、tar、tar.gz)并解压。
下载地址:https://pypi.org/project/requests/#files
-
进入目录
-
执行编译和安装命令
python3 setup.py build
python3 setup.py install
内置模块(一)
Python内置的模块有很多,我们也已经接触了不少相关模块,接下来咱们就来做一些汇总和介绍。
内置模块有很多 & 模块中的功能也非常多,我们是没有办法注意全局给大家讲解,在此我会整理出项目开发最常用的来进行讲解。
3.1 os
import os
# 1. 获取当前脚本绝对路径
"""
abs_path = os.path.abspath(__file__)
print(abs_path)
"""
# 2. 获取当前文件的上级目录
"""
base_path = os.path.dirname( os.path.dirname(路径) )
print(base_path)
"""
# 3. 路径拼接
"""
p1 = os.path.join(base_path, 'xx')
print(p1)
p2 = os.path.join(base_path, 'aa', 'bb', 'a1.png')
print(p2)
"""
# 4. 判断路径是否存在
"""
exists = os.path.exists(p1)
print(exists)
"""
# 5. 创建文件夹
"""
os.makedirs(路径)
"""
"""
path = os.path.join(base_path, 'aa', 'bb', 'uuuu')
if not os.path.exists(path):
os.makedirs(path)
"""
# 6. 是否是文件夹
"""
file_path = os.path.join(base_path, 'aa', 'bb', 'uuuu.png')
is_dir = os.path.isdir(file_path)
print(is_dir) # False
folder_path = os.path.join(base_path, 'aa', 'bb', 'uuuu')
is_dir = os.path.isdir(folder_path)
print(is_dir) # True
"""
# 7. 删除文件或文件夹
"""
os.remove("文件路径")
"""
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
- listdir,查看目录下所有的文件
- walk,查看目录下所有的文件(含子孙文件)
import os
"""
data = os.listdir(r"D:\PycharmProjects")
print(data)
# ['convert.py', '__init__.py', 'page.py', '__pycache__', 'utils.py', 'tencent']
"""
"""
要遍历一个文件夹下的所有文件,例如:遍历文件夹下的所有py文件
"""
data = os.walk(r"D:\PycharmProjects")
for path, folder_list, file_list in data:
for file_name in file_list:
file_abs_path = os.path.join(path, file_name)
ext = file_abs_path.rsplit(".",1)[-1]
if ext == "py":
print(file_abs_path)
3.2 shutil
import shutil
# 1. 删除文件夹
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
# 2. 拷贝文件夹
"""
shutil.copytree(r"C:\Users\zj\Desktop\files",r"D:\PycharmProjects\files")
"""
# 3.拷贝文件
"""
shutil.copy("x.png",r"D:\PycharmProjects\files")
shutil.copy(r"C:\Users\zj\Desktop\files\2x.png",r"D:\PycharmProjects\files\2x.png")
"""
# 4.文件或文件夹重命名
"""
shutil.move("x.png",r"xxx.png")
shutil.move(r"D:\PycharmProjects\files",r"D:\PycharmProjects\imgs")
"""
# 5. 压缩文件
"""
# base_name,压缩后的压缩包文件
# format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar".
# root_dir,要压缩的文件夹路径
"""
# shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files')
# 6. 解压文件
"""
# filename,要解压的压缩包文件
# extract_dir,解压的路径
# format,压缩文件格式
"""
# shutil.unpack_archive(filename=r'datafile.zip', extract_dir=r'xxxxxx/xo', format='zip')
3.3 sys
import sys
# 1. 获取解释器版本
"""
print(sys.version)
print(sys.version_info)
print(sys.version_info.major, sys.version_info.minor, sys.version_info.micro)
"""
# 2. 导入模块路径
"""
print(sys.path)
"""
- argv,执行脚本时,python解释器后面传入的参数
import sys
print(sys.argv)
# 例如,请实现下载图片的一个工具。
def download_image(url):
print("下载图片", url)
def run():
# 接受用户传入的参数
url_list = sys.argv[1:]
for url in url_list:
download_image(url)
if __name__ == '__main__':
run()
3.4 random
import random
# 1. 获取范围内的随机整数
v = random.randint(10, 20)
print(v)
# 2. 获取范围内的随机小数
v = random.uniform(1, 10)
print(v)
# 3. 随机抽取一个元素
v = random.choice([11, 22, 33, 44, 55])
print(v)
# 4. 随机抽取多个元素
v = random.sample([11, 22, 33, 44, 55], 3)
print(v)
# 5. 打乱顺序
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(data)
print(data)
3.5 hashlib
import hashlib
hash_object = hashlib.md5()
hash_object.update("ZJ".encode('utf-8'))
result = hash_object.hexdigest()
print(result)
import hashlib
hash_object = hashlib.md5("iajfsdunjaksdjfasdfasdf".encode('utf-8'))
hash_object.update("ZJ".encode('utf-8'))
result = hash_object.hexdigest()
print(result)
总结
-
模块和包的区别
-
了解如何导入模块
- 路径
- 导入方式
-
导入模块时一般要遵循的规范【补充】
-
注释:文件顶部或init文件中。
-
在文件顶部导入
-
有规则导入,并用空行分割。
-
# 先内置模块
# 再第三方模块
# 最后自定义模块
import os
import sys
import random
import hashlib
import requests
import openpyxl
from commons.utils import encrypt
-
第三方模块安装的方法
-
常见内置模块