有人可以解释这种行为吗?
A.py:
import B
values = []
if __name__ == "__main__":
values.append('something')
print(values)
B.printValues()
B.py:
import A
def printValues():
print(A.values)
结果:
['something']
[]
我预计:
['something']
['something']
最佳答案
是这样的:
A
导入B
。这会导致B
中的代码被执行:A
被导入。因为这是第一次导入A
(A
不在sys.modules
中),A<中的所有代码
被执行。import B
被执行。这不会执行B
中的代码,因为B
已经在sys.modules
中。- 已创建空列表
values
。 if __name__=='__main__'
block 未执行,values
为空。
B
现在有一个模块A
的引用,与主模块不同。您可以通过添加import __main__; 来确认这一点;打印 __main__ 是 A
到B
。它将打印False
。
关于Python 模块导入行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050562/