gpt4 book ai didi

Python 全局变量似乎不能跨模块工作

转载 作者:太空狗 更新时间:2023-10-29 19:37:48 25 4
gpt4 key购买 nike

代码

我想在其他模块中使用一个全局变量,并将其值的更改“传播”到其他模块。

a.py:

x="fail"
def changeX():
global x
x="ok"

b.py:

from a import x, changeX
changeX()
print x

如果我运行 b.py,我希望它打印“ok”,但它实际上打印“fail”。

问题

  1. 这是为什么?
  2. 如何让它打印“ok”?

(运行 python-2.7)

最佳答案

简而言之:你不能在不修改代码的情况下让它打印“ok”。

from a import x, changeX相当于:

import a
x = a.x
changeX = a.changeX

换句话说,from a import x不会创建 x间接指向 a.x , 它创建了一个新的全局变量 xb 当前值为a.x的模块.由此得出后来更改为 a.x不影响b.x .

要使您的代码按预期工作,只需更改 b.py 中的代码即可至 import a :

import a
a.changeX()
print a.x

你的导入不会那么困惑,代码更容易阅读(因为不用看导入列表就可以清楚地知道什么标识符来自哪里),循环导入的问题会更少(因为不是所有的标识符都需要一次),并且使用 reload 等工具的机会更大去工作。

关于Python 全局变量似乎不能跨模块工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13403357/

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