[英]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.