我有这个:
g_c = 0
class TestClass():
global g_c
def run(self):
for i in range(10):
g_c = 1
print(g_c)
t = TestClass()
t.run()
print(g_c)
我怎样才能真正修改我的全局变量 g_c?
原文由 torayeff 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要在函数内移动 global
声明:
class TestClass():
def run(self):
global g_c
for i in range(10):
g_c = 1
print(g_c)
该语句告诉 Python 编译器对该名称的任何赋值(和 其他绑定操作)都会改变全局命名空间中的值;默认是将分配给函数中任何地方的任何名称放在局部名称空间中。该语句仅适用于当前范围。
由于您永远不会在 类主体 中分配给 g_c
,因此将语句放在那里没有任何效果。 global
语句只适用于它所使用的范围,从不适用于任何嵌套范围。请参阅 global
语句文档,其打开方式为:
全局语句是适用于整个当前代码块的声明。
嵌套函数和类不是当前代码块的一部分。
我将在此处插入针对使用全局变量来共享不断变化的状态的强制性警告:不要这样做,这会使您更难推断代码的状态、更难测试、更难重构等。如果您 必须 共享一个改变单例状态(整个程序中的一个值)然后至少使用一个 _类属性_:
class TestClass():
g_c = 0
def run(self):
for i in range(10):
TestClass.g_c = 1
print(TestClass.g_c) # or print(self.g_c)
t = TestClass()
t.run()
print(TestClass.g_c)
请注意我们如何仍然可以从外部访问相同的值,命名空间为 TestClass
命名空间。
原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答915 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
通过在访问它的函数中声明它
global
:Python 文档 是这样说的,关于
global
语句: