gpt4 book ai didi

python - 在自身内部导入 py 文件

转载 作者:行者123 更新时间:2023-11-28 19:37:14 25 4
gpt4 key购买 nike

这是测试.py:

import sys

a = 50
b = [1,2]

def change():
print "Here 1"
import test
print "Here 2"
test.a = -1
test.b = [0,1]
return

def main():
print "Here 3"
change()
print "Here 4"
print a, b

if 1:
main()

上述 python 代码在系统上运行时生成以下输出:

Here 3
Here 1
Here 3
Here 1
Here 2
Here 4
-1 [0, 1]
Here 2
Here 4
50 [1, 2]

令我困惑的是,为什么没有无限循环的“Here 1\n Here 3”输出。如何证明 print a, b 的输出是合理的?

最佳答案

当您将文件作为脚本运行时,它不会被视为 test 模块。它被认为是 __main__ 模块。

当执行到 import test 时,文件的第二次执行开始,此时模块被认为是 test

当执行再次遇到 import test 时,Python 认识到它已经在导入 test 并且不会重新执行该模块。相反,它只是将半初始化的 test 模块对象加载到当前命名空间并继续。 Python 的乐观假设是您已编写代码,以便在导入完成之前不需要 test 的内容。

当执行命中分配给 test.atest.b 时,会影响 test 模块,但不会影响 __main__ ,尽管它们来自同一个文件。因此,导入模块中的 print a, b 反射(reflect)了新值,而 __main__ 中的 print a, b 反射(reflect)了初始值。

关于python - 在自身内部导入 py 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21326245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com