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

问题描述 投票:-2回答:1

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

globals()['z'] = 8

不能更“标准”?

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

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

在回顾中,它是“明显的”globals()返回一个实例,当我写全局变量('z')时我加入了索引但是Dict是由REFERENCE返回的,因为我可以改变它只是做:

globals()['z'] = 8

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

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

所有的“魔法”只是指向索引:)

python function variables local-variables globals
1个回答
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()['z'] = 8 print(“z =”,z)#z = 8

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


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

def foo():
    global z
    z = 8
© www.soinside.com 2019 - 2024. All rights reserved.