python 中from import 有哪些方式导入
在 Python 中,from ... import ... 语句有多种变体,用于从模块中导入特定的对象、函数、类或子模块。以下是所有常见的导入方式及示例:
1. 基本导入方式
(1) 导入整个模块
import module_name
示例:
import math
print(math.sqrt(16)) # 4.0
(2) 从模块导入特定对象
from module_name import name1, name2
示例:
from math import sqrt, pi
print(sqrt(16)) # 4.0
print(pi) # 3.141592653589793
(3) 导入所有对象(不推荐,易造成命名冲突)
from module_name import *
示例:
from math import *
print(sqrt(16)) # 4.0
print(pi) # 3.141592653589793
2. 别名导入(as)
(4) 给模块起别名
import module_name as alias
示例:
import numpy as np
print(np.array([1, 2, 3])) # [1 2 3]
(5) 给导入的对象起别名
from module_name import name as alias
示例:
from math import sqrt as square_root
print(square_root(16)) # 4.0
3. 相对导入(用于包内部)
(6) 从当前包的子模块导入
from .submodule import name
示例:
假设目录结构:
my_package/
__init__.py
utils.py
main.py
在 main.py 中导入 utils.py 的函数:
from .utils import my_function
(7) 从父包的子模块导入
from ..sibling_module import name
示例:
my_project/
package1/
__init__.py
module1.py
package2/
__init__.py
module2.py
在 package2/module2.py 中导入 package1/module1.py:
from ..package1.module1 import some_function
4. 动态导入(运行时导入)
(8) 使用 importlib 动态导入
import importlib
module = importlib.import_module("module_name")
示例:
module = importlib.import_module("math")
print(module.sqrt(16)) # 4.0
(9) 动态导入并获取属性
from importlib import import_module
module = import_module("module_name")
attr = getattr(module, "function_name")
示例:
math_module = import_module("math")
sqrt_func = getattr(math_module, "sqrt")
print(sqrt_func(16)) # 4.0
5. 条件导入
(10) 根据条件导入不同模块
if condition:
from module1 import name
else:
from module2 import name
示例:
import sys
if sys.platform == "linux":
from linux_utils import get_system_info
else:
from windows_utils import get_system_info
6. 延迟导入(Lazy Import)
(11) 在函数内部导入(减少启动时间)
def my_function():
from heavy_module import expensive_operation
return expensive_operation()
示例:
def calculate():
from numpy import array # 只有调用 calculate() 时才导入
return array([1, 2, 3])
总结
| 导入方式 | 语法 | 适用场景 |
|---|---|---|
| 基本导入 | import module |
导入整个模块 |
| 导入特定对象 | from module import name |
只导入需要的部分 |
| 通配符导入 | from module import * |
快速导入所有(不推荐) |
| 别名导入 | import module as alias |
避免命名冲突 |
| 相对导入 | from .submodule import name |
包内部模块导入 |
| 动态导入 | importlib.import_module() |
运行时决定导入内容 |
| 条件导入 | if ...: from ... import ... |
根据环境选择导入 |
| 延迟导入 | 在函数内部 import |
优化启动时间 |
你可以根据需求选择合适的导入方式!
郭慕荣博客园

浙公网安备 33010602011771号