在 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 别名 用于缩短前缀。from 模块 import * 会导入大量名称,易与本地定义冲突,一般项目中不宜使用:

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)

模块文件须位于解释器搜索路径上(常见为与主程序同一目录),导入时使用文件名(不含 .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.py
from mypkg import utils
from mypkg.utils import helper

常见错误

  • 自建文件名勿与标准库同名;例如项目中的 random.py 可能遮蔽标准库 random。
  • from math import * 将大量名称导入当前作用域,增加命名冲突风险。
  • 模块顶层演示代码若无 if __name__ == '__main__' 保护,被导入时也会执行。

本节说明了 Python 中模块的导入方式与包的基本结构。下一节介绍递归:基线条件、递归步骤及深度限制。