当多次导入模块时,python 是否会进行优化?

2025-02-18 09:25:00
admin
原创
73
摘要:问题描述:如果您的代码的某些子模块加载了一个大型模块,那么从该命名空间引用该模块而不是再次导入它有什么好处吗?例如:我有一个模块 MyLib,它大量使用了 ReallyBigLib。如果我有导入 MyLib 的代码,我是否应该像这样挖出该模块import MyLib ReallyBigLib = MyLib....

问题描述:

如果您的代码的某些子模块加载了一个大型模块,那么从该命名空间引用该模块而不是再次导入它有什么好处吗?

例如:我有一个模块 MyLib,它大量使用了 ReallyBigLib。如果我有导入 MyLib 的代码,我是否应该像这样挖出该模块

import MyLib
ReallyBigLib = MyLib.SomeModule.ReallyBigLib

或者只是

import MyLib
import ReallyBigLib

解决方案 1:

Python 模块可以被视为单例……无论你导入它们多少次,它们都只会初始化一次,因此最好这样做:

import MyLib
import ReallyBigLib

进口声明的相关文件:

https://docs.python.org/2/reference/simple_stmts.html#the-import-statement

一旦知道了模块的名称(除非另有说明,术语“模块”将指代包和模块),就可以开始搜索模块或包。首先检查的是 sys.modules,这是之前已导入的所有模块的缓存。如果在那里找到模块,则在导入的步骤 (2) 中使用它。

导入的模块缓存在sys.modules中:

这是一个将模块名称映射到已加载模块的字典。可以对其进行操作以强制重新加载模块和其他技巧。请注意,从此字典中删除模块与在相应的模块对象上调用 reload() 不同。

解决方案 2:

正如其他人指出的那样,Python 维护已导入的所有模块的内部列表。首次导入模块时,模块(脚本)将在其自己的命名空间中执行,直到结束,内部列表将更新,并在导入语句之后继续执行。

试试这个代码:

   # module/file a.py
   print "Hello from a.py!"
   import b

   # module/file b.py
   print "Hello from b.py!"
   import a

没有循环:只有缓存查找。

>>> import b
Hello from b.py!
Hello from a.py!
>>> import a
>>>

Python 的优点之一就是一切都可以归结为在命名空间中执行脚本。

解决方案 3:

这没什么实质性的区别。如果大模块已经加载,则第二个示例中的第二次导入除了将“ReallyBigLib”添加到当前命名空间外,不会执行任何操作。

解决方案 4:

警告:Python 不保证模块不会被初始化两次。我曾遇到过这样的问题。请参阅讨论:
http ://code.djangoproject.com/ticket/8193

解决方案 5:

导入模块的内部注册表是字典sys.modules,它将模块名称映射到模块对象。您可以在那里查看当前导入的所有模块。

您还可以通过一些小技巧(如果需要)来使用一些有用的技巧sys.modules- 例如将您自己的对象添加为可以被其他模块导入的伪模块。

解决方案 6:

性能方面也一样。Python 中还没有 JIT 编译器。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用