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