在Python中用一行覆盖全局变量?

Tre*_*ham 11 python

我知道我可以写:

foo = 'bar'
def update_foo():
  global foo
  foo = 'baz'
Run Code Online (Sandbox Code Playgroud)

但我真的需要两行代码吗?Python,唉,不允许我说

global foo = 'baz'
Run Code Online (Sandbox Code Playgroud)

我还可以将两条线混合在一起,不幸的是重复

global foo; foo = 'baz'
Run Code Online (Sandbox Code Playgroud)

还有其他快捷方式吗?我正在使用Python 2.6.5,但我很想知道Python 3的响应.

Ale*_*lli 15

你可以使用我最喜欢的替代品global(一种非常特殊的味道......):

import sys
thismodule = sys.modules[__name__]
thismodule.foo = 'bar'

def update_foo():
  thismodule.foo = 'baz'
Run Code Online (Sandbox Code Playgroud)

一旦你做了thismodule参考,你不需要global在这个模块中使用,因为你总是使用合格的名字而不是名称(更好的想法恕我直言......但也许只在MHO,我已经thismodule当Python 3怀孕时,无法说服Guido提供[[或其他一些具有此功能的标识符]].

需要注意的是第一分配foo,在全球范围内,既可以做这个明确的语法,将其分配给barename foo,你在你的代码做(我想这并不奇怪,我的喜好去明确的形式,不过,在这案件,勉强).


Ian*_*ing 6

这是两个陈述,没有任何其他形式.


mik*_*kej 5

您可以使用globals()字典将其编写为:

def update_foo():
  globals()['foo'] = 'baz'
Run Code Online (Sandbox Code Playgroud)

但是我只想坚持两行,或者用一种;方法分开。


Joh*_*ooy 5

def update_foo():
    globals().update(foo='baz')
Run Code Online (Sandbox Code Playgroud)