模块和包
前言
模块和包帮助组织代码,提高可重用性。本章介绍如何创建和使用模块及包。
模块
模块是包含 Python 代码的文件。
创建模块
创建 mymodule.py:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
class Calculator:
def add(self, a, b):
return a + b
导入模块
# 方式1: import 模块名
import mymodule
print(mymodule.greet("Alice")) # Hello, Alice!
print(mymodule.PI) # 3.14159
calc = mymodule.Calculator()
print(calc.add(5, 3)) # 8
# 方式2: from 模块名 import 特定内容
from mymodule import greet, PI
print(greet("Bob")) # Hello, Bob!
print(PI) # 3.14159
# 方式3: import 模块名 as 别名
import mymodule as mm
print(mm.greet("Charlie"))
# 方式4: from 模块名 import * (不推荐)
from mymodule import *
print(greet("David"))
包
包是包含多个模块的目录,必须包含 __init__.py 文件。
创建包结构
mypackage/
├── __init__.py
├── module1.py
├── module2.py
└── subpackage/
├── __init__.py
└── submodule.py
init.py 文件
# mypackage/__init__.py
from .module1 import function1
from .module2 import Class2
__version__ = "1.0.0"
使用包
# 导入包中的模块
from mypackage import module1
module1.function1()
# 导入包中的特定函数
from mypackage.module1 import function1
function1()
# 导入子包
from mypackage.subpackage import submodule
标准库模块
Python 内置了许多有用的模块。
math 模块
import math
print(math.sqrt(16)) # 4.0
print(math.pi) # 3.141592653589793
print(math.sin(math.pi/2)) # 1.0
print(math.ceil(3.2)) # 4
print(math.floor(3.8)) # 3
datetime 模块
from datetime import datetime, date, time
# 当前日期和时间
now = datetime.now()
print(now) # 2023-05-05 14:30:00.123456
# 创建日期对象
d = date(2023, 5, 5)
print(d) # 2023-05-05
# 格式化日期
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted) # 2023-05-05 14:30:00
# 解析日期字符串
parsed = datetime.strptime("2023-05-05", "%Y-%m-%d")
print(parsed) # 2023-05-05 00:00:00
random 模块
import random
# 随机整数
print(random.randint(1, 10)) # 1 到 10 之间的随机整数
# 随机浮点数
print(random.random()) # 0.0 到 1.0 之间的随机浮点数
# 从序列中随机选择
fruits = ["apple", "banana", "cherry"]
print(random.choice(fruits)) # 随机选择一个
# 打乱序列
random.shuffle(fruits)
print(fruits) # 打乱后的列表
# 随机样本
print(random.sample(fruits, 2)) # 从列表中随机选择 2 个
os 模块
import os
# 获取当前工作目录
print(os.getcwd())
# 列出目录内容
print(os.listdir("."))
# 创建目录
os.makedirs("new_folder", exist_ok=True)
# 检查路径是否存在
print(os.path.exists("new_folder"))
# 路径操作
path = os.path.join("folder", "file.txt")
print(path)
第三方模块
使用 pip 安装:
pip install requests
使用:
import requests
response = requests.get("https://api.github.com/user", auth=("user", "pass"))
print(response.status_code)
print(response.json())
创建自己的模块
模块搜索路径
import sys
print(sys.path) # Python 搜索模块的路径列表
if name == "main"
# mymodule.py
def main():
print("This is the main function")
if __name__ == "__main__":
main()
当直接运行模块时,__name__ 为 "__main__";当被导入时,为模块名。
本章小结
- 模块是组织代码的基本单位
- 包是模块的集合,需要
__init__.py - 掌握不同的导入方式
- 熟悉常用标准库模块
- 了解如何创建和分发自己的模块
练习题
- 创建一个包含数学函数的模块,并导入使用。
- 组织代码为一个包结构,包含多个模块。
- 使用 datetime 模块创建一个简单的日历应用。
- 编写一个脚本,使用 random 模块生成随机密码。
课程总结
- Python 基础语法和数据类型
- 控制流和函数
- 数据结构和面向对象编程
- 文件操作和异常处理
- 模块和包的使用
浙公网安备 33010602011771号