為什么變數 url 沒有改變?
def test():
url = "Start"
def change():
global url
url = "End"
change()
print(url)
return url
測驗()
是的,它需要是一個函式中的一個函式。這樣我的其余代碼就更簡單了。謝謝你的幫助!
uj5u.com熱心網友回復:
全域變數是在模塊的頂級范圍內定義的變數,而不僅僅是在函式范圍之外定義的任何變數。中定義的變數test是一個非區域從可變change的角度,而不是一個全域變數。
改用nonlocal關鍵字:
def test():
url = "Start"
def change():
nonlocal url
url = "End"
change()
print(url)
return url
nonlocal導致分配發生在最接近的封閉范圍 whereurl定義。(如果不存在這樣的區域作用域,則nonlocal宣告是語法錯誤。與在最近的封閉作用域(無論是區域的還是全域的)中查找的自由變數相比,全域作用域中的定義不算數。)
在您的原始函式中,change確實設定(甚至創建)了一個名為url. 例如:
def test():
url = "Start"
def change():
global url
url = "End"
change()
print(url)
return url
try:
print(url)
except NameError:
print("'url' not yet defined")
test() # Outputs "Start"
print(url) # Outputs "End"
uj5u.com熱心網友回復:
解決方案是使用nonlocal關鍵字
def test():
url = "Start"
def change():
nonlocal url
url = "End"
change()
print(url)
return url
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/400103.html
