杰瑞科技汇

Python中import究竟是什么意思?

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

Python中import究竟是什么意思?-图1
(图片来源网络,侵删)

这就像你做饭:

  • 你可以自己从零开始种菜、磨面、切菜、烹饪(自己写所有代码)。
  • 但更常见的是,你去超市买来现成的酱油、醋、调料包(模块),然后直接用它们来做菜(使用模块里的功能)。import 就是你去超市“拿”这些调料包的动作。

为什么需要 import

Python 的一个核心理念是 “不要重复造轮子”import 机制正是实现这一理念的关键。

  • 代码重用: 你可以将常用的函数、类、变量等代码组织在一个 .py 文件中,这个文件就叫做一个 模块,当你在另一个文件中需要使用这些代码时,直接 import 这个模块即可,避免了重复编写。
  • 命名空间隔离: 每个模块都有自己独立的命名空间(可以理解为一个独立的“房间”),这样做可以避免不同模块之间的变量名或函数名发生冲突,A 模块里有一个 calculate() 函数,B 模块里也可以有一个同名的 calculate() 函数,它们互不干扰。
  • 组织大型项目: 对于复杂的项目,你可以将代码按功能拆分到不同的模块和包(文件夹形式的模块)中,使代码结构更清晰、更易于管理和维护。

import 的几种主要用法

import 语句有几种不同的形式,以满足不同的需求。

a) 基本用法:import module_name

这是最简单的形式,它会加载整个模块,并让你通过 模块名.函数名 的方式来访问其中的内容。

Python中import究竟是什么意思?-图2
(图片来源网络,侵删)

示例: 假设你有一个名为 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

Python中import究竟是什么意思?-图3
(图片来源网络,侵删)

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}")

这在导入像 pandasnumpy 这样的库时非常常见:

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}")

为什么不推荐?

  1. 命名空间污染:它会把你导入的所有东西都扔到当前文件里,很容易和你自己定义的变量名或函数名发生冲突,导致难以排查的错误。
  2. 代码可读性差:当你看到 add() 这个函数调用时,你无法快速判断它是在当前文件定义的,还是从某个模块 import 进来的,你需要去文件顶部查找 import * 语句,非常不方便。

模块是如何被找到的?

当你写下 import my_math 时,Python 解释器需要知道去哪里找 my_math.py 这个文件,它会按照一个特定的顺序搜索:

  1. 当前目录:首先在执行脚本的那个文件夹里找。
  2. 环境变量 PYTHONPATH:这是一个环境变量,你可以把它设置成一个或多个目录的路径,Python 也会去这些路径下寻找。
  3. 标准库路径:Python 自带的各种模块(如 math, os, sys)所在的目录。
  4. 第三方库路径:你通过 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 程序员的关键一步。

分享:
扫描分享到社交APP
上一篇
下一篇