15

将变量初始化为global var或调用globals().update(var).

谢谢

4

1 回答 1

28

当你说

global var

您是在告诉 Python var 与在全局上下文中定义的 var 相同。您可以通过以下方式使用它:

var=0
def f():
    global var
    var=1
f()
print(var)
# 1  <---- the var outside the "def f" block is affected by calling f()

如果没有 global 语句,“def f”块内的 var 将是一个局部变量,设置它的值对“def f”块外的 var 没有影响。

var=0
def f():
    var=1
f()
print(var)
# 0  <---- the var outside the "def f" block is unaffected

当你说 globals.update(var) 我猜你实际上是指 globals().update(var)。让我们把它分开。

globals() 返回一个 dict 对象。dict 的键是对象的名称,dict 的值是关联对象的值。

每个 dict 都有一个名为“update”的方法。所以 globals().update() 是对这个方法的调用。update 方法至少需要一个参数,并且该参数应该是一个字典。如果你告诉 Python

globals().update(var)

那么 var 最好是一个字典,并且你告诉 Python 用 var 字典的内容更新 globals() 字典。

例如:

#!/usr/bin/env python

# Here is the original globals() dict
print(globals())
# {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}

var={'x':'Howdy'}
globals().update(var)

# Now the globals() dict contains both var and 'x'
print(globals())
# {'var': {'x': 'Howdy'}, 'x': 'Howdy', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}

# Lo and behold, you've defined x without saying x='Howdy' !
print(x)
Howdy
于 2009-10-19T17:29:41.577 回答