Python中from 模块import *与import 模块两种导入方式的区别
Python两种导入方式的核心区别
基于你给出的Filee.py示例,两种导入方式的区别主要如下:
- 命名空间污染程度不同
import Filee只会将Filee作为独立模块对象导入当前命名空间,模块内的所有变量、函数都挂载在该模块对象下,完全不会和当前文件已定义的同名成员产生冲突。from Filee import *会将模块中所有公开成员(名称不带前导下划线的变量、函数、类;若模块定义了__all__变量则仅导入__all__列表内的成员)直接注入当前文件的全局命名空间,非常容易和当前文件自定义的同名成员互相覆盖,引发难以排查的Bug。 - 调用方式与代码可读性不同
import Filee调用模块成员时必须加Filee.前缀,即示例中的Filee.f(Filee.a),虽然写法稍长,但可以明确标识成员来源,代码可维护性更高。from Filee import *可以直接调用模块成员,即示例中的f(a),写法更简洁,但导入模块较多的场景下,很难直接判断某函数/变量的来源,可读性很差。 - 适用场景不同
正规项目开发中几乎不会使用from xxx import *写法,仅在小型临时脚本、或明确不会产生命名冲突的场景(比如导入专门提供通用工具函数的模块)下才会使用。import xxx是工业级代码的首选导入方式,也可以搭配from xxx import a, f这种明确指定导入成员的写法,兼顾简洁性和可读性。 - 导入逻辑的微小差异
两种方式都会完整执行一次目标模块的顶层代码,差异仅在于导入后成员的挂载位置:前者将模块对象挂载到当前命名空间,后者将模块的公开成员逐个挂载到当前命名空间,二者性能差异极小,基本可以忽略。
内容的提问来源于stack exchange,提问作者user13744439
相关产品推荐
相关产品推荐

