Python import 详解
import 机制
什么是 import
在 Python 中,import 用于引入模块(module)、包(package)或其他 Python 文件中的代码,以便在当前文件中使用。模块是包含 Python 代码(函数、类、变量等)的 .py 文件,包是一个包含 init.py 文件的文件夹。
Python 的模块系统比前端更灵活,因为它支持动态加载、别名、选择性导入等功能。
基本语法
# 导入整个模块
import math
print(math.sqrt(16)) # 输出: 4.0# 导入模块并设置别名
import numpy as np
array = np.array([1, 2, 3])# 从模块中导入特定对象
from math import sqrt
print(sqrt(16)) # 输出: 4.0# 导入模块中的所有内容(不推荐,易导致命名冲突)
from math import *
对比前端:
- import math 类似 import * as math from ‘math’;
- from math import sqrt 类似 import { sqrt } from ‘math’;
- import numpy as np 类似 import numpy from ‘numpy’ as np;(ES Module 风格)
模块搜索路径
Python 在导入模块时会按照以下顺序查找:
1.当前目录
2.PYTHONPATH 环境变量中指定的路径
3.Python 安装的默认路径(如标准库路径)
import sys
print(sys.path)
包 pack
包是一个包含 init.py 文件的文件夹,用于组织多个模块。假设有以下目录结构:
my_package/
├── __init__.py
├── module1.py
└── module2.py
对比前端:
包类似于前端项目中的一个文件夹,包含多个模块文件,init.py 类似于前端的 index.js,用于初始化包。
动态导入
Python 支持动态导入模块,类似于前端的动态 import()。
- 动态加载插件
- 根据条件加载不同模块
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # 输出: 4.0
使用一些注意
- 避免循环导入:模块 A 导入 B,B 又导入 A,会导致 ImportError。解决方法是重构代码或延迟导入。
- 命名冲突:避免使用 from module import *,因为可能覆盖当前命名空间的变量。
- 性能:导入大型模块(如 pandas)可能增加启动时间,建议按需导入。