Python 模块导入行为

标签 python import module

有人可以解释这种行为吗?

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']

最佳答案

是这样的:

  1. A 导入 B。这会导致 B 中的代码被执行:
    1. A 被导入。因为这是第一次导入A(A不在sys.modules中),A<中的所有代码 被执行。
      1. import B 被执行。这不会执行B中的代码,因为B已经在sys.modules中。
      2. 已创建空列表 values
      3. if __name__=='__main__' block 执行,values 为空。
    2. B 现在有一个模块 A 的引用,与主模块不同。您可以通过添加 import __main__; 来确认这一点;打印 __main__ 是 AB。它将打印 False

关于Python 模块导入行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050562/

相关文章:

python - 如何在pygame中制作动画

python - metrics.r2_score 和acccuracy_score 之间有什么区别

mysql - 如何使用SQL加载数据到表中自动添加列?

java - 导入 microsoft.exchange.webservices 的问题

python - 从 Python 中的相对路径导入

python - 如何在Python中访问另一个模块的成员

python - 在 Python 中读取文件时忽略空行的最简单方法

python - Flask-Babel 不使用可插入 View 进行翻译

javascript - 如何使用curl.js加载对象?

c++ - Qt 模块错误 - QtOpenGL 中的 LNK 1112