簡體   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