[英]Why parameters are passed outside the parenthesis () in globals(), locals() and vars() in Python?
我是 Py 的新手,但我知道语法 function(param1,.. paramN) 并且我无法理解这一点:
globals()['z'] = 8
不能更“标准”吗?
globals('z') = 8
# or..
globals(param = 'z') = 8
编辑:感谢大家的回答,我只有几个小时玩 Python
回想起来,它是“明显的” globals() 返回一个实例,并且我在编写 globals('z') 时加入了索引,但是 Dict 是通过引用返回的,因为我可以更改它,只需执行以下操作:
globals()['z'] = 8
或者...只是另一个成员建议:
x = globals();
x['z'] = 8
所有的“魔法”只是一个指向索引的指针:)
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
是的,这是真的。 在某种意义上, globals()
返回的dict
是python 获取全局变量值的地方。 修改 dict 直接修改全局值。
作为仅供参考,您通常不应该执行globals()['z'] = 8
。 如果您已经在全局范围内(即不在函数/类内),只需执行z = 8
,并且在函数内,请执行以下操作:
def foo():
global z
z = 8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.