變數的作用域
什麼是變數的作用域?
變數的作用域是指變數在程式中可被訪問的範圍。理解變數的作用域對於編寫正確且高效的程式碼至關重要。根據變數的定義位置,Python 中的變數主要分為兩類:全域變數和區域變數。
全域變數與區域變數
- 全域變數(Global Variables):
- 定義在所有函式或類別外部的變數。
- 全域變數可以在整個程式的任何地方被訪問和修改。
- 這些變數在程式的全域作用域(global scope)中有效。
- 區域變數(Local Variables):
- 定義在函式內部的變數。
- 區域變數只能在該函式內部被訪問和修改。
- 這些變數在函式的區域作用域(local scope)中有效,一旦函式執行完畢,區域變數就不再存在。
作用域範例
讓我們通過一個簡單的範例來理解全域變數和區域變數的區別:
total = 0 # 這是一個全域變數 def sum(arg1, arg2): total = arg1 + arg2 # 這是一個區域變數 print("函式內是區域變數:", total) return total sum(10, 20) print("函式外是全域變數:", total)
範例解析:
total = 0
定義了一個全域變數total
,它可以在程式的任何地方被訪問。- 在
sum
函式內部,我們定義了一個區域變數total
。這個變數只在sum
函式內部有效,並不影響全域變數total
。 - 當我們在
sum
函式內部執行total = arg1 + arg2
時,這個total
是區域變數,不會修改全域變數total
的值。 - 執行完
sum(10, 20)
後,程式會輸出區域變數total
的值,即 30。 - 最後,當我們在函式外部打印
total
時,會輸出全域變數的值,即 0,因為區域變數的修改並未影響全域變數。
輸出結果:
函式內是區域變數 : 30 函式外是全域變數 : 0
使用全域變數和區域變數的注意事項
- 避免名稱衝突:當全域變數和區域變數名稱相同時,Python 會優先使用區域變數。因此,在設計程式時,應避免在全域和區域作用域中使用相同名稱的變數,以防止意外行為。
- 全域變數的修改:如果在函式內需要修改全域變數的值,必須使用
global
關鍵字來明確告訴 Python,這個變數是全域變數,而不是定義一個新的區域變數。total = 0 # 全域變數 def update_total(value): global total total += value # 修改全域變數 total update_total(10) print("修改後的全域變數:", total)
這個範例演示了如何在函式內部修改全域變數的值。