python 中from import 有哪些方式导入

admin
2026-07-09 05:17:15

在 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

优化启动时间

你可以根据需求选择合适的导入方式!