【问题标题】:Global variables between modules [duplicate]模块之间的全局变量[重复]
【发布时间】:2021-06-28 00:34:44
【问题描述】:

我一直找不到这件事对我不起作用的原因,所以我想在这里问一个问题。

我有 2 个文件:

file2.py

def test():
    global justTry
    justTry = "hello"

ma​​in.py

from file2 import *

def main():
    print(justTry)

if __name__ == '__main__':
    test()
    main()

我收到错误:NameError: name 'justTry' is not defined。 为什么我不能使用我在列表之前的步骤中声明为全局变量的justTry 变量?

【问题讨论】:

  • 是否调用了test() 函数,它初始化了全局?或者,是否在函数外部初始化了全局? (我可以插话说全局 变量 绝对是一个“坏主意”,并建议可能有一种更强大的方法。)
  • @pinkfloydx33 - 我试过了。我在main()函数中分配了“global justTry”,但还是同样的错误。
  • @S3DEV 我知道这不是最好的主意,但我想知道为什么它不起作用。 test() 函数被调用 100%,我直接从函数中尝试了语句,一切正常。
  • 这是可能,因为在执行import * 时变量还不存在,但我会留给其他人写一个实际的答案并解释语义详细...
  • global 关键字将变量定义为全局在其所在模块的上下文中,而不是在模块之间。另外,来自官方 Python 常见问题解答:How do I share global variables across modules?

标签: python python-3.x global-variables


【解决方案1】:

当“*导入”某些东西时,它会执行代码,并将全局变量复制到您的全局变量中。但如果全局变量稍后被更改,它不会重新复制全局变量。解决方案是,调用 test 后重新导入文件

file2.py

def test():
    global justTry
    justTry = "hello"

ma​​in.py

from file2 import *

def main():
    print(justTry)

if __name__ == '__main__':
    test()
    from file2 import *
    main()

【讨论】:

  • 感谢您的回答,正是我想要的!
  • 也感谢您提出的好问题,这可能是唯一的问题是有人在为我准备第二个问题!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2023-04-06
  • 2020-03-31
  • 1970-01-01
  • 2016-02-10
  • 2015-03-07
  • 1970-01-01
相关资源
最近更新 更多