首頁  >  文章  >  後端開發  >  為什麼函數呼叫不更新全域變數?

為什麼函數呼叫不更新全域變數?

Barbara Streisand
Barbara Streisand原創
2024-10-19 12:00:29502瀏覽

Why Does Function Call Not Update Global Variable?

函數呼叫不會更新全域變數

這個問題探討了一個程式設計挑戰,其中最初分配為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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn