【问题标题】:Does Python cache imported files?Python 是否缓存导入的文件?
【发布时间】:2019-08-04 13:10:43
【问题描述】:

考虑以下几点:

a.py

foo = 1

b.py

bar = 2

c.py

import a
kik = 3

d.py

import a
import c
def main():
    import b
main()
main()

  • a.py 加载了多少次?
  • b.py 加载了多少次?

更一般地说,我想知道 Python 如何处理导入的文件和函数/变量?

【问题讨论】:

标签: python


【解决方案1】:

ab 都加载一次。当您导入一个模块时,它的 content 会被缓存,因此当您再次加载同一个模块时,您不会调用原始脚本进行导入,而是使用“finder”完成:

这适用于模块,因此如果您有一个 d.py 其中导入 b,它将绑定到与 c.py 中的导入相同的缓存。


一些有趣的内置模块可以帮助理解导入期间发生的情况:

您可以利用导入系统使这些缓存失效,例如:

https://docs.python.org/3/library/importlib.html#importlib.import_module

如果您要动态导入自解释器开始执行后创建的模块(例如,创建 Python 源文件),您可能需要调用 invalidate_caches() 以便导入系统注意到新模块。


imp(和importlib py3.4+)允许在导入后重新编译模块:

import imp
import a
imp.reload(a)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2017-02-07
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多