簡體   English   中英

這個python全球范圍魔術背后的邏輯是什么?

[英]What's the logic behind this python global scoping magic?

我正在弄亂Python中的范圍,並發現了一些我覺得很奇怪的東西:

g = 5

def foo(a):
    if a:
        global g
        g = 10
    else:
        g = 20


print("global g: ",g)

foo(False)
print("global g: ",g) # 20?! What?

foo(True)
print("global g: ",g)

我相信第二次打印應該是“5”,因為全局聲明從未執行過,但很明顯,輸出為20(!)。

這背后的邏輯是什么?

python 編譯器使用global關鍵字將函數作用域中的名稱標記為全局。

只要在函數中的任何位置使用它,該名稱就不再是本地名稱。

請注意, if不引入新范圍,則只有函數和模塊可以執行(類,列表,字典和集合理解是函數范圍的特殊情況)。

一個(難以閱讀和非pythonic)解決方法是使用globals()函數:

def foo(a):
    if a:
        globals()['g'] = 10
    else:
        g = 20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM