6.1 模块
什么是模块
一个 .py 文件就是一个模块(module)。模块的意义:
- 把代码按功能拆分到不同文件,方便管理
- 使用别人写好的代码(Python 自带的、或网上下载的)
import:导入模块
Python 自带了大量现成的模块(称为标准库),用 import 导入后即可使用。以数学模块 math 为例:
import math
print(math.sqrt(16)) # 4.0 开平方
print(math.pi) # 3.141592653589793 圆周率
print(math.ceil(3.2)) # 4 向上取整
print(math.floor(3.8)) # 3 向下取整
格式:import 模块名,然后用 模块名.功能 调用。
其他导入方式
# 方式二:只导入需要的功能,用的时候不用加模块名前缀
from math import sqrt, pi
print(sqrt(16)) # 直接用,不写 math.
print(pi)
# 方式三:给模块起别名(模块名太长时常用)
import math as m
print(m.sqrt(16))
💡 新手建议优先用
import 模块名的方式,代码里math.sqrt一眼就能看出功能来自哪里。不推荐
from math import *(导入全部):容易和自己的变量名冲突,来源也不清晰。
导入自己写的模块
假设有两个文件在同一个文件夹:
tools.py(工具模块):
def add(a, b):
return a + b
def sub(a, b):
return a - b
main.py(主程序):
import tools
print(tools.add(1, 2)) # 3
print(tools.sub(5, 3)) # 2
运行 main.py,就用上了 tools.py 里的函数。这就是多文件编程的开始:把工具函数放一个文件,主逻辑放另一个文件。
if __name__ == "__main__" 是什么
你以后会经常看到这个写法:
# tools.py
def add(a, b):
return a + b
if __name__ == "__main__":
# 只有直接运行 tools.py 时才执行这里
# 被别的文件 import 时不执行
print(add(1, 2)) # 用来测试本模块的代码
解释:import 一个模块时,模块里的代码会被从头到尾执行一遍。如果 tools.py 里有测试用的 print,别人一导入就会跟着执行,很烦人。把测试代码放进 if __name__ == "__main__": 里,就只在直接运行该文件时执行。
新手阶段记住用法即可:模块里的测试代码放在这个 if 下面。
什么是包
**包(package)**就是装了多个模块的文件夹,用来组织更大的项目:
my_project/
├── main.py
└── utils/ ← 这是一个包
├── __init__.py ← 有这个文件的文件夹才是包(可以是空文件)
├── math_tools.py
└── text_tools.py
导入包里的模块:
from utils import math_tools
math_tools.add(1, 2)
现阶段了解概念即可,等项目大了自然会用到。
练习
- 用
math模块计算:81 的平方根、2.3 向上取整的结果。 - 自己动手:创建
greet.py,里面写一个say_hi(name)函数;再创建main.py导入并调用它。
点击查看答案
# 1
import math
print(math.sqrt(81)) # 9.0
print(math.ceil(2.3)) # 3
# 2
# greet.py
def say_hi(name):
print(f"Hi, {name}!")
# main.py
import greet
greet.say_hi("小明")
本章小结
- 一个 .py 文件就是一个模块,
import导入使用 - 自己的模块放同一文件夹即可互相导入
- 模块的测试代码放在
if __name__ == "__main__":里
下一节:6.2 常用标准库