Python 中 import 和 from...import 有什么区别及用法详解

江岸
江岸
发布时间:2026-10-11 | 2人浏览过
原创

本文深入解析了 Python 语言中两类核心的模块引入语法。通过梳理 import 与 from...import 的底层调用逻辑,揭示了全局命名空间与局部变量引用的实质区别。结合标准库调用示例,明确了不同写法对代码整洁度与可维护性的影响,并提供工业级开发的规范指引。

认识 Python 的模块引入机制

Python 借助模块(Module)实现功能的模块化组织,本质上是一个包含多个函数与类定义的 .py 文件。在编写主程序时,若需调用外部编写的逻辑,必须先执行引入操作。这与其他语言中的 #include 或 require 异曲同工,但在具体语法执行效果上主要分为两种模式。

两种引入方式的核心差异

两者的本质区别在于「命名空间的管理策略」。为了方便对照,我们假设存在一个名为 support.py 的外部模块,其内部定义了一个基础方法:

def print_func(par):
    print("Hello :", par)

第一步:使用 import 完整引入模块

import 指令会将指定模块作为一个独立对象载入当前程序的顶层命名空间。这种做法类似于将整个文件夹挂载到当前目录,所有资源都必须通过 模块名.成员名 的全限定路径进行访问。

# 载入模块对象
import support

# 调用时必须携带前缀标识
support.print_func("Runoob")

执行上述流程后,解释器会严格锁定来源为 support 对象下的 print_func。这种写法的最大优势是天然具备物理隔离属性,即便当前脚本自身也存在同名函数,也不会产生覆盖风险。

第二步:使用 from...import 定向提取

from...import 允许直接将模块内的特定元素“剥离”并放置到当前的局部环境中。搭配通配符 * 使用时,表示将该模块内所有的公开成员批量注入当前作用域。这种方式类似于直接把需要的实体文件复制到了眼前,使用时省略了前缀校验。

# 将 support 中的所有公开属性提取到当前层级
from support import *

# 直接调用,无需前缀
print_func("Runoob")

由于 print_func 已经被直接映射至当前文件的顶部作用域,调用变得极为简洁。但代价是增加了潜在的碰撞概率,一旦当前文件中已有同名变量,原有的定义将被静默覆盖。

工程实践中的规范建议

尽管 from...import * 在极短的脚本编写或交互式调试中能节省敲击次数,但在企业级开发与大型协作项目中,官方与社区均强烈主张优先采用 import 模块 形式,理由十分明确:

  • 保障代码的可追溯性:numpy.array() 的意图远比裸写的 array() 清晰,阅读者能瞬间定位依赖来源。
  • 阻断命名空间污染:Python 生态中开源组件极多,大量通用工具类存在重名现象。坚持使用前缀能有效防止关键逻辑被意外篡改。
  • 增强依赖边界感:显式声明引入的模块,能够帮助后续接手的项目成员迅速掌握架构轮廓与耦合关系。

以上就是 Python 中 from…import *和import区别及规范使用的详细内容,更多关于 Python 模块管理与优化编码的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表