繁体   English   中英

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

[英]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()返回的dictpython 获取全局变量值的地方。 修改 dict 直接修改全局值。


作为仅供参考,您通常不应该执行globals()['z'] = 8 如果您已经在全局范围内(即不在函数/类内),只需执行z = 8 ,并且在函数内,请执行以下操作:

def foo():
    global z
    z = 8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM