跳到主要内容

6.1 模块

什么是模块

一个 .py 文件就是一个模块(module)。模块的意义:

  1. 把代码按功能拆分到不同文件,方便管理
  2. 使用别人写好的代码(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)

现阶段了解概念即可,等项目大了自然会用到。

练习

  1. math 模块计算:81 的平方根、2.3 向上取整的结果。
  2. 自己动手:创建 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 常用标准库