我知道我可以写:
foo = 'bar'
def update_foo():
global foo
foo = 'baz'
但我真的需要两行代码吗? Python,唉,不允许我说
global foo = 'baz'
我还可以将这两行与不幸重复的
混合在一起global foo; foo = 'baz'
还有其他快捷方式吗?我使用的是Python 2.6.5,但我很想知道Python 3的响应。
答案 0 :(得分:14)
你可以使用我最喜欢的替代global
(非常特殊的味道......):
import sys
thismodule = sys.modules[__name__]
thismodule.foo = 'bar'
def update_foo():
thismodule.foo = 'baz'
完成thismodule
引用后,您无需在此模块中使用global
,因为您始终使用限定的名称而不是裸名称(更好的想法恕我直言......但也许仅在MHO中,我无法说服Guido提供thismodule
[[或其他具有此功能的标识符]回到Python 3孕育的时候。)
请注意,在全局级别,foo
的第一个作业可以使用此显式语法或通过分配到名称foo
来完成,就像在您的代码(我想我的偏好是明确的形式并不奇怪,但在这种情况下,只是勉强)。
答案 1 :(得分:6)
这是两个陈述,没有任何其他形式。
答案 2 :(得分:4)
你可以使用globals()
字典这样写它:
def update_foo():
globals()['foo'] = 'baz'
但我会坚持使用2行或用;
方法分开。
答案 3 :(得分:3)
def update_foo():
globals().update(foo='baz')
答案 4 :(得分:1)
如果让你感觉更好,就把它全部放在一行......
global foo; foo = 'baz'