Python模块(module)通常对应一个 .py 文件,里面可以放函数、类和常量。用 import 把模块载入当前文件后,就能通过限定名调用其中的定义,从而把大程序拆成多个职责更清晰的文件。
先 import 一个模块
标准库里的 math 是现成例子。导入后,用 模块名.名字 访问其中的函数或常量:
import math
print(math.sqrt(16)) # 4.0
print(math.pi)
print(math.ceil(2.1)) # 3几种 import 写法
import 模块 引入整个模块。from 模块 import 名字 把指定名字直接绑到当前命名空间,调用时不必再写模块前缀。import 模块 as 别名 用于缩短前缀。星号导入会一次拉进大量名字,容易和自己的函数撞名,一般项目里不建议用:
import math
from math import sqrt, pi
import math as m
print(sqrt(16))
print(m.sqrt(16))标准库里常见的几个
随机数、日期、路径、JSON 文本,在标准库里都有对应模块,导入即可用,不必自己从零实现:
import random
import datetime
import os
import json
print(random.randint(1, 6))
print(datetime.date.today())
print(os.getcwd())
print(json.dumps({"a": 1}))自己的模块
任意一个 .py 文件都可以当模块。例如同目录下的 mytools.py:
# mytools.py
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
主程序里这样导入:
import mytools
print(mytools.greet("Tom"))
print(mytools.PI)只要模块文件位于解释器能搜到的路径上(最常见是与主程序同一目录),就可以直接 import 文件名(不含 .py)。
if __name__ == '__main__'
被 import 时,模块顶层代码会执行一遍。若文件里还写了演示或自测打印,不希望别人一导入就跑出来,就把这些入口代码放进 if __name__ == '__main__': 里。直接运行该文件时条件为真。作为模块导入时为假:
# mytools.py
def greet(name):
return f"Hello, {name}!"
if __name__ == '__main__':
print("这是模块的测试:")
print(greet("Tom"))
包(package)
多个模块可以放进同一个目录,并带上 __init__.py(可为空),这个目录就称为包,适合按功能分子目录:
mypkg/
__init__.py
utils.py
io.pyfrom mypkg import utils
from mypkg.utils import helper常见误区
- 自建文件不要与标准库同名。例如项目里若有
random.py,import random可能先命中你的文件,标准库反而进不来。 from math import *会把大量名字倒进当前作用域,覆盖风险高。- 模块顶层的演示代码若没有
if __name__ == '__main__'保护,被导入时也会执行。