首页 / Python3 入门教程 / 模块基础

Python3 入门教程

模块基础

本教程共 70 篇 · 第 28 篇 · 更新于 2026-07-22 · 约 4 分钟阅读

PythonPython3 入门教程模块import__name__模块搜索路径

28. 模块基础

本节目标:理解模块的概念,掌握 import 的各种写法,学会组织自己的代码文件。

什么是模块

模块就是一个 .py 文件。你写的每个 Python 脚本,本质上都是一个模块。

把相关的函数、类、变量放到一个文件里,其他地方通过 import 引入,就能复用。这是代码组织的基本单位。

Note

模块名就是文件名去掉 .py。比如 math_tools.py 的模块名是 math_tools

import 的几种方式

假设有个 utils.py 文件:

# utils.py
PI = 3.14159

def add(a, b):
    return a + b

def greet(name):
    print(f"Hello, {name}!")

导入整个模块

import utils

print(utils.PI)
print(utils.add(2, 3))
utils.greet("Alice")

这种方式最清晰,一眼能看出某个函数来自哪个模块。

从模块导入指定内容

from utils import add, greet

print(add(2, 3))
greet("Alice")
Warning

如果导入的名字和当前文件里的变量重名,会发生覆盖。用这种方式时要留心命名冲突。

导入所有内容(不推荐)

from utils import *

这会把模块里所有不以下划线开头的名字都导入当前命名空间。名字冲突的风险很大,而且读者不知道某个名字来自哪里。尽量避免

起别名

import numpy as np
from utils import greet as say_hello

别名在长模块名或需要避免冲突时很有用。np 几乎成了 NumPy 的行业标准别名。

模块搜索路径

Python 按这个顺序找模块:

  1. 当前目录
  2. PYTHONPATH 环境变量指定的目录
  3. Python 安装目录下的标准库
  4. .pth 文件里指定的路径

可以用 sys.path 查看:

import sys
print(sys.path)
Tip

不要把自己的文件名起成和标准库一样,比如 random.pyjson.py。Python 会优先找到当前目录下的文件,导致标准库用不了。

namemain

每个模块都有一个 __name__ 属性:

  • 被直接运行时,__name__ 的值是 '__main__'
  • 被 import 导入时,__name__ 的值是模块名

利用这个特性,可以写「既当模块又当脚本」的文件:

# calculator.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

# 以下代码只在直接运行此文件时执行
if __name__ == "__main__":
    print("测试 add:", add(2, 3))
    print("测试 subtract:", subtract(5, 2))

直接运行 python calculator.py,会执行测试代码。如果 import calculator,测试代码不会运行。

Note

if __name__ == "__main__": 是 Python 的惯用写法。所有「直接运行时才执行」的代码都放这里面,比如单元测试、命令行参数解析等。

模块里的可执行代码

模块被导入时,文件里的代码会从上到下执行一遍。所以模块里经常放初始化逻辑:

# config.py
import os

# 模块被导入时,自动读取环境变量
API_KEY = os.getenv("API_KEY")
DEBUG = os.getenv("DEBUG", "false").lower() == "true"

但注意:一个模块在一个程序生命周期内只会被导入一次。多次 import 不会重复执行。

dir() 查看模块内容

import math
print(dir(math))   # 列出 math 模块的所有公开名字

带下划线的是内部成员,一般不用管。


来源:参考了 runoob「Python3 模块」、liaoxuefeng「模块」等,改写后所得。