Python应该如何导入(import)模块及包

Python应该如何导入(import)模块及包
最新回答
烟雨蒙蒙

2026-08-18 04:31:49

在Python中,导入模块和包是组织代码、重用功能的基础操作。以下是详细的导入方法及注意事项:

一、导入模块

模块通常是单个.py文件,也可为.pyo、.pyc、.pyd、.so、.dll等编译文件。

1. 基本导入import spam # 导入整个模块print(spam.a) # 访问模块变量spam.foo() # 调用模块函数c = spam.bar() # 使用模块类2. 多模块导入import socket, os, regex # 同时导入多个模块3. 别名导入import os as systemimport socket as netsystem.chdir("..") # 通过别名访问net.gethostname()4. 从模块导入特定对象from socket import gethostname # 导入指定对象到当前命名空间print(gethostname()) # 直接使用from socket import gethostname as hostname # 带别名导入h = hostname()5. 导入所有对象(慎用)from socket import * # 导入所有对象(不推荐)# 若模块定义了__all__,则只导入列表中的对象# foo.py__all__ = ['bar', 'spam']二、导入包

包是包含__init__.py的目录,可包含子包和模块。

1. 包结构示例Graphics/ __init__.py Primitive/ __init__.py lines.py fill.py2. 导入方式# 方式1:全路径导入import Graphics.Primitive.fillGraphics.Primitive.fill.floodfill(img, x, y, color)# 方式2:部分导入from Graphics.Primitive import fillfill.floodfill(img, x, y, color)# 方式3:导入特定对象from Graphics.Primitive.fill import floodfillfloodfill(img, x, y, color)3. __init__.py的作用
  • 包初始化代码
  • 定义__all__控制from ... import *行为
# Graphics/Primitive/__init__.py__all__ = ["lines", "fill"] # 指定可导入的模块三、高级特性1. 模块搜索路径

解释器按sys.path顺序查找模块:

import sysprint(sys.path) # 查看搜索路径2. 模块重载import foo# 修改foo.py后from importlib import reloadreload(foo) # 重新加载模块3. 条件执行if __name__ == '__main__': # 单独执行时的代码 main()else: # 被导入时的代码 pass四、注意事项
  1. 重复导入:首次导入后,后续导入仅创建引用
  2. 作用域限制:函数内禁止使用from ... import *
  3. 命名冲突:避免与内置函数/关键字重名
  4. 性能考虑:优先使用import module而非from module import *
五、最佳实践
  1. 显式导入优于隐式导入
  2. 使用绝对导入(如import package.module)
  3. 避免循环导入
  4. 合理组织包结构,通过__init__.py暴露公共接口

通过灵活运用这些导入方式,可以高效组织Python项目代码,实现功能复用和模块化开发。