为什么参数在Python的globals(),locals()和vars()中的括号()之外传递?

时间:2014-04-17 02:03:47

标签: python function variables local-variables globals

我在Py中很新,但我知道语法功能(param1,.. paramN),我无法理解:

globals()['z'] = 8

无法更多'标准' ?

globals('z') = 8  
# or..
globals(param = 'z') = 8

编辑:感谢所有人的回答,我只有几个小时玩Python

在回顾中,它很明显"我写了全局变量时,globals()返回一个实例并且我加入了索引(' z')但是由于我可以改变它而直接返回Dict:

globals()['z'] = 8

或......只是其他成员建议:

x = globals(); 
x['z'] = 8

所有"魔法"只是指向索引的指针:)

1 个答案:

答案 0 :(得分:1)

globals实际上是一个不带参数的函数,它返回一个dict,它将标识符的名称映射到它们的值。

尝试在python解释器中键入globals()并检查结果。

>>> z = 8
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'z': 8, '__doc__': None, '__package__': None}

注意'z': 8部分。

  

但是如果你运行这段代码,你会看到实际需要参数并改变dict / list / whatever:z = 7 globals()[&#39; z&#39;] = 8 print(&#34; z = &#34;,z)#z = 8

是的,这是真的。 dict 返回的globals(),在某种意义上,python用于获取全局变量的值。修改dict会直接修改全局值。


作为一个FYI,你通常不应该做globals()['z'] = 8之类的事情。如果您已经在全局范围内(即不在函数/类中),并且在函数内部,请执行z = 8

def foo():
    global z
    z = 8