我知道我可以写:在Python中用一行覆盖全局变量?
foo = 'bar'
def update_foo():
global foo
foo = 'baz'
但我真的需要代码有两行呢? Python的,唉,不会让我说
global foo = 'baz'
我也与不幸重复
global foo; foo = 'baz'
任何其他快捷方式两线一起混搭?我使用的是Python 2.6.5,但我很好奇听到Python 3的响应。
我知道我可以写:在Python中用一行覆盖全局变量?
foo = 'bar'
def update_foo():
global foo
foo = 'baz'
但我真的需要代码有两行呢? Python的,唉,不会让我说
global foo = 'baz'
我也与不幸重复
global foo; foo = 'baz'
任何其他快捷方式两线一起混搭?我使用的是Python 2.6.5,但我很好奇听到Python 3的响应。
你可以使用我最喜爱的替代global
(一个相当奇特的味道......):
import sys
thismodule = sys.modules[__name__]
thismodule.foo = 'bar'
def update_foo():
thismodule.foo = 'baz'
一旦你取得了thismodule
参考,你并不需要在此模块中使用global
,因为你总是有工作合格的名字而不是裸的名字(一个好得多的想法恕我直言...但也许只在MHO中,我还没有能够说服Guido提供thismodule
[[或某些其他标识符与此功能]]时,Python 3正在孕育)。
注意第一个分配给foo
,在全球范围内,可以将其分配给barename foo
,你在你的代码做(我想这并不奇怪,我的喜好去进行任何与此明确的语法,或尽管如此,在这种情况下,几乎没有)。
给模块一个'this'关键字?由于某种原因,只是给了我heebiejeebies。如果我是圭多,我会让全球声明包括一个巨大的红色闪烁警告标志。 – 2010-06-22 00:07:56
你刚刚开启了我的想法,达到了这个金块的全新多功能领域。干杯! – Ephexx 2017-01-31 00:03:41
这是两个陈述,没有任何其他形式。
+1:就是这样。 – 2010-06-21 23:54:09
......只有当你发誓只使用裸号...... ;-)。 – 2010-06-22 00:00:36
你可以使用globals()
字典写这样的:
def update_foo():
globals()['foo'] = 'baz'
,但我只想坚持与2线或用;
方法分离。
确实,尽管通常不会推荐使用'globals()'(甚至更多的'locals()')。 – 2010-06-21 23:41:36
从http://www.python.org/dev/peps/pep-0020/开始,“显式比隐式更好”。 – 2010-06-21 23:47:32
如果它让你感觉更好地把它全部在一行...
global foo; foo = 'baz'
def update_foo():
globals().update(foo='baz')
这样练习的目的是什么?当使用'global'时,你声明你打算干涉不属于你的变量(大概是其他人做的) - 但是为什么你会在检查它里面的内容之前马上重写它?似乎没有实际意义... – 2010-06-21 23:46:02
我同意,我一直想这样做。我也想要更聪明的元组解开包装,但是你不能赢得他们全部:) – 2010-06-22 01:24:58