函數呼叫不會更新全域變數
這個問題探討了一個程式設計挑戰,其中最初分配為False 的全域變數是'在函數內引用時,t 會被更新。儘管函數改變了全域變數的值,但主程式的循環繼續執行,導致無限循環。要理解這個問題需要深入研究命名空間和變數作用域的概念。
命名空間和變數作用域
在程式設計中,每個函數和模組都會建立自己的命名空間。命名空間是該範圍內已知且可存取的名稱(變數、函數等)的集合。當在函數內為變數賦值時,即使存在同名的全域變量,也會在函數的命名空間中建立一個新變數。
使用全域變數
在這種情況下,當函數內引用名為「done」的全域變數時,會在函數的命名空間中建立一個具有相同名稱的新局部變數。這種局部「完成」與全局「完成」不同。更改本地“done”對全域變數沒有影響。
解
要克服這個問題,必須使用 global 關鍵字來明確引用全域變數的功能。透過使用全域done,函數告訴解釋器存取全域「done」變量,而不是建立一個新的本地變數。
修改代碼
修復問題,該函數可以修改如下:
<code class="python">def function(): global done for loop: code if not comply: done = True</code>
說明
使用全域done在函數內使用的變數和全域變數之間建立了聯繫。當函數修改done的值時,它會更新最初引用的相同全域變數。這確保了當函數將 did 設為 True 時,主程式的 while 迴圈將按預期終止。
以上是為什麼函數呼叫不更新全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!