函數呼叫不會更新全域變數
這個問題探討了一個程式設計挑戰,其中最初指定為False 的全域變數不更新在函數內引用時,t 會被更新。儘管函數改變了全域變數的值,但主程式的循環繼續執行,導致無限循環。要理解這個問題需要深入研究命名空間和變數作用域的概念。
命名空間和變數作用域
在程式設計中,每個函數和模組都會建立自己的命名空間。命名空間是該範圍內已知且可存取的名稱(變數、函數等)的集合。當在函數內部為變數賦值時,即使存在同名的全域變量,也會在函數的命名空間中建立一個新變數。
使用全域變數
在這種情況下,當函數內引用名為「done」的全域變數時,會在函數的命名空間中建立一個具有相同名稱的新局部變數。這種局部「完成」與全局「完成」不同。更改局部“done”對全域變數沒有影響。
解
要克服這個問題,必須使用 global 關鍵字來明確引用內部的全域變數的功能。透過使用全域done,函數告訴解釋器存取全域「done」變量,而不是建立一個新的本地變數。
修改程式碼
修正問題,函數可以修改如下:
def function():
global done
for loop:
code
if not comply:
done = True
解釋
使用全域done在函數內使用的變數和全域變數之間建立了聯繫。當函數修改done的值時,它會更新最初引用的相同全域變數。這確保了當函數將 did 設為 True 時,主程式的 while 迴圈將按預期終止。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3