Python模块导入两种方式对比:间接引用还是直接导入更优?
结论
第二种直接显式导入全部所需依赖的方案更好,你担心的重复导入占用额外内存的问题完全不存在。
原因解释
1. 重复导入不会额外占用内存
Python的模块加载有全局缓存机制:所有已经加载的模块都会被存到sys.modules字典中,同一个模块在整个解释器运行周期内只会被初始化加载一次,后续所有导入操作都是直接引用已缓存的模块对象,不会重复执行模块代码,也不会额外占用内存。就算你在100个文件里都import file1,内存里也只会有一份file1的实例。
2. 间接导入的方案有明显缺陷
- 可读性极差:其他维护者(包括几个月后的你自己)看到
file2.file1.GreetingCard时,无法直接判断GreetingCard的来源,必须额外翻阅file2的代码才能理清依赖关系,大幅提升理解成本。 - 稳定性极低:该写法完全耦合了file2的内部实现逻辑,如果后续file2的代码调整,比如移除了对file1的导入、修改了导入别名(比如改成
import file1 as greeting_lib),你的代码会直接报错,完全没必要把自身逻辑的稳定性绑定在其他模块的内部导入细节上。 - 写法冗余繁琐:调用类的路径层级更多,写起来比直接调用
file1.GreetingCard麻烦很多。
3. 显式导入是Python社区公认的最佳实践
Python的设计原则里明确提到「显式优于隐式」,显式列出所有依赖能让代码的依赖关系一目了然,不管是后续排查问题还是重构代码,成本都会低很多。
内容的提问来源于stack exchange,提问作者Morris Barr
相关产品推荐
相关产品推荐

