在实际编程中,我们经常需要将功能拆分成多个文件或引用别人写好的功能模块,以提高代码的复用性与可维护性。这种“功能拆分与复用”的机制,就是 Python 模块化编程 的核心。模块是 Python 程序结构的重要组成部分,通过导入模块,我们可以轻松使用各种功能,而无需重复造轮子。
一、什么是模块
模块(Module) 是一个包含 Python 定义和语句的文件,文件名以 .py 结尾。简单来说,一个 .py 文件就是一个模块。
比如,我们创建一个名为 mymath.py 的文件,内容如下:
def add(a, b):
return a + b
def sub(a, b):
return a - b
这时,我们就定义了一个名为 mymath 的模块,其中包含了两个函数 add() 和 sub()。
二、导入模块的方式
Python 提供了多种导入模块的方式,根据需求灵活使用。
1. 使用 import 导入整个模块
import mymath
print(mymath.add(3, 5))
print(mymath.sub(10, 4))
这里通过 模块名.函数名 的方式调用函数。
这种方式清晰明了,但每次使用函数时都要加上模块名前缀。
2. 使用 from...import... 导入部分功能
from mymath import add
print(add(3, 5))
这样我们就可以直接使用 add(),无需加上模块名前缀。
如果需要导入多个函数,可以写成:
from mymath import add, sub
3. 导入模块中的所有内容
from mymath import *
这样可以直接使用模块中的所有函数和变量,但不推荐这样使用,因为容易与当前命名空间的变量冲突。
4. 使用别名简化模块名
有时候模块名很长,我们可以使用 as 给模块取别名:
import mymath as m
print(m.add(4, 6))
这在使用第三方库(如 numpy、pandas)时非常常见:
import numpy as np
import pandas as pd
三、常用的 Python 内置模块
Python 自带了丰富的标准库,我们可以直接导入使用,无需额外安装。
1. math 数学模块
import math
print(math.sqrt(16)) # 开平方
print(math.pi) # 圆周率
2. random 随机模块
import random
print(random.randint(1, 10)) # 生成 1 到 10 的随机整数
print(random.choice(['apple', 'banana', 'pear'])) # 随机选择一个元素
3. datetime 日期时间模块
import datetime
now = datetime.datetime.now()
print(now)
四、自定义模块的导入
假设我们有如下文件结构:
project/
│
├── main.py
└── utils.py
utils.py 内容:
def greet(name):
print(f"Hello, {name}!")
main.py 内容:
import utils
utils.greet("Python")
运行 main.py 时,Python 会自动找到同一目录下的 utils.py 并执行导入。
五、模块的搜索路径
当你导入一个模块时,Python 会按照以下顺序查找模块:
- 当前程序所在目录;
- 系统环境变量
PYTHONPATH指定的路径; - Python 安装路径下的标准库目录。
你可以通过以下代码查看模块的搜索路径:
import sys
print(sys.path)
如果你想临时添加搜索路径:
import sys
sys.path.append("/path/to/my/modules")
六、导入模块时执行的内容
当你第一次导入模块时,Python 会执行模块文件中的所有顶层代码。 比如:
# mymodule.py
print("模块正在被加载...")
a = 10
当执行:
import mymodule
会输出:
模块正在被加载...
但再次导入同一个模块时,Python 不会重新执行,因为模块会被缓存。
七、包(Package)的概念
当一个目录下包含一个 __init__.py 文件时,这个目录就成为一个包(Package),可以包含多个模块。
目录结构如下:
mypackage/
│
├── __init__.py
├── math_utils.py
└── string_utils.py
使用时可以这样导入:
from mypackage import math_utils
math_utils.add(3, 5)
或者:
from mypackage.math_utils import add
add(3, 5)
八、总结
- 模块是
.py文件,包是包含__init__.py的目录; import导入整个模块,from...import...导入部分内容;- 模块可复用、可组织代码结构;
- 常用模块有:
math、random、datetime、os、sys等; - Python 导入模块时,会从当前目录、
PYTHONPATH和系统库路径中查找。
结语: 模块化编程是 Python 的核心思想之一。它让代码更有组织、更易维护、更易复用。熟练掌握模块与包的使用,是从“会写 Python”到“精通 Python”迈出的关键一步。