import 的核心作用是 “引入” 或 “加载”,它让你能够使用其他文件(模块)中已经写好的代码,而无需自己重新编写。

这就像你做饭:
- 你可以自己从零开始种菜、磨面、切菜、烹饪(自己写所有代码)。
- 但更常见的是,你去超市买来现成的酱油、醋、调料包(模块),然后直接用它们来做菜(使用模块里的功能)。
import就是你去超市“拿”这些调料包的动作。
为什么需要 import?
Python 的一个核心理念是 “不要重复造轮子”。import 机制正是实现这一理念的关键。
- 代码重用: 你可以将常用的函数、类、变量等代码组织在一个
.py文件中,这个文件就叫做一个 模块,当你在另一个文件中需要使用这些代码时,直接import这个模块即可,避免了重复编写。 - 命名空间隔离: 每个模块都有自己独立的命名空间(可以理解为一个独立的“房间”),这样做可以避免不同模块之间的变量名或函数名发生冲突,A 模块里有一个
calculate()函数,B 模块里也可以有一个同名的calculate()函数,它们互不干扰。 - 组织大型项目: 对于复杂的项目,你可以将代码按功能拆分到不同的模块和包(文件夹形式的模块)中,使代码结构更清晰、更易于管理和维护。
import 的几种主要用法
import 语句有几种不同的形式,以满足不同的需求。
a) 基本用法:import module_name
这是最简单的形式,它会加载整个模块,并让你通过 模块名.函数名 的方式来访问其中的内容。

示例:
假设你有一个名为 my_math.py 的文件(这就是一个模块):
# my_math.py
PI = 3.14159
def add(a, b):
return a + b
def subtract(a, b):
return a - b
你在另一个文件 main.py 中想使用 my_math.py 里的代码:
# main.py
import my_math # 引入 my_math 模块
# 使用模块中的变量
print(f"PI 的值是: {my_math.PI}")
# 使用模块中的函数
result = my_math.add(10, 5)
print(f"10 + 5 的结果是: {result}")
another_result = my_math.subtract(10, 5)
print(f"10 - 5 的结果是: {another_result}")
执行 main.py 的输出:
PI 的值是: 3.14159
10 + 5 的结果是: 15
10 - 5 的结果是: 5
注意:这里必须使用 my_math.add,而不是直接 add。

b) 给模块取别名:import module_name as alias
如果模块名太长,或者你想避免与当前文件中的变量名冲突,可以给它取一个简短的别名。
示例:
# main.py
import my_math as mm # 将 my_math 模块别名为 mm
# 现在可以使用别名 mm 来访问模块内容
print(f"PI 的值是: {mm.PI}")
result = mm.add(20, 8)
print(f"20 + 8 的结果是: {result}")
这在导入像 pandas 或 numpy 这样的库时非常常见:
import pandas as pd import numpy as np
这样你就可以用 pd.DataFrame() 和 np.array() 来调用它们的功能,非常方便。
c) 导入特定内容:from module_name import item
如果你只需要模块中的某一个或几个函数、变量,可以使用这种形式,它会直接将指定的内容“复制”到当前文件的命名空间中,你可以直接使用它们的名字,而无需加上 模块名. 前缀。
示例:
# main.py
from my_math import add, PI # 只从 my_math 中导入 add 函数和 PI 变量
# 现在可以直接使用 add 和 PI,前面不需要加 my_math.
print(f"PI 的值是: {PI}")
result = add(100, 50)
print(f"100 + 50 的结果是: {result}")
# 注意:my_math.subtract 是不可用的,因为它没有被导入
# subtract(10, 5) # 这行代码会报错:NameError: name 'subtract' is not defined
d) 导入所有内容(不推荐):from module_name import *
这种形式会导入模块中除了下划线 _ 开头之外的所有公共内容。
示例:
# main.py
from my_math import * # 导入 my_math 中的所有内容
# 现在可以直接使用所有内容
print(f"PI 的值是: {PI}")
result = add(7, 3)
print(f"7 + 3 的结果是: {result}")
another_result = subtract(7, 3)
print(f"7 - 3 的结果是: {another_result}")
为什么不推荐?
- 命名空间污染:它会把你导入的所有东西都扔到当前文件里,很容易和你自己定义的变量名或函数名发生冲突,导致难以排查的错误。
- 代码可读性差:当你看到
add()这个函数调用时,你无法快速判断它是在当前文件定义的,还是从某个模块import进来的,你需要去文件顶部查找import *语句,非常不方便。
模块是如何被找到的?
当你写下 import my_math 时,Python 解释器需要知道去哪里找 my_math.py 这个文件,它会按照一个特定的顺序搜索:
- 当前目录:首先在执行脚本的那个文件夹里找。
- 环境变量
PYTHONPATH:这是一个环境变量,你可以把它设置成一个或多个目录的路径,Python 也会去这些路径下寻找。 - 标准库路径:Python 自带的各种模块(如
math,os,sys)所在的目录。 - 第三方库路径:你通过
pip安装的库(如requests,pandas)所在的目录(通常是site-packages文件夹)。
你可以通过 sys.path 这个列表来查看 Python 的搜索路径:
import sys print(sys.path)
import 语句形式 |
作用 | 示例 | 优点 | 缺点 |
|---|---|---|---|---|
import module |
导入整个模块 | import math |
命名空间清晰,不易冲突 | 使用时需要写 module.func |
import module as alias |
导入整个模块并取别名 | import pandas as pd |
代码简洁,避免长名冲突 | 别名需要记忆 |
from module import item |
导入模块中的特定项 | from math import sqrt |
使用方便,直接用 item |
可能与当前命名空间冲突 |
from module import * |
导入模块中的所有项 | from math import * |
书写最“方便” | 强烈不推荐,极易造成命名污染和可读性差 |
import 是 Python 编程的基石,它让代码变得模块化、可复用且易于管理,掌握它的不同用法,是成为一名高效 Python 程序员的关键一步。
