在 Python 中,變數的範圍會影響到它在程式中的可見性以及生命週期。
主要分為兩大類:區域變數 (local variable) 和全域變數 (global variable)。
但在開始說明前,先來說明什麼是Python 的作用域 (Scope)
在 Python 中,作用域指的是一個變數名稱有效的範圍。簡單來說,就是一個變數在程式碼中的哪些地方可以被存取。
Python 的作用域主要分為以下幾種:
print()
、len()
等。Python 在查找變數時,會按照以下順序搜尋:
x = "global" # 全局變數
def outer():
y = "enclosing" # 包含作用域變數
def inner():
z = "local" # 局部變數
print(x, y, z) # 輸出:global enclosing local
inner()
outer()
在上面的例子中:
x
是全局變數,可以在任何地方訪問。y
是包含作用域變數,只能在 outer
函數和 inner
函數中訪問。z
是局部變數,只能在 inner
函數中訪問。定義: 在函數內部定義的變數稱為區域變數。
作用域: 僅在定義它的函數內有效。
生命週期: 當函數執行完畢,區域變數就會被銷毀。
def my_function():
x = 10 # x 是區域變數
print(x)
my_function()
# 在函數外部嘗試訪問 x 會報錯,因為 x 只在 my_function 內有效
定義: 在函數外部定義的變數稱為全域變數。
作用域: 在整個程式中都有效,包括在函數內。
生命週期: 從定義開始,直到程式結束。
x = 20 # x 是全域變數
def my_function():
print(x) # 在函數內可以直接訪問全域變數
my_function()
print(x)
x = 10 # 全域變數
def my_function():
y = 20 # 區域變數
print(x) # 可以訪問全域變數
print(y) # 只能在函數內訪問
my_function()
print(x) # 可以訪問全域變數
print(y) # 會報錯,因為 y 是區域變數,在函數外部無法訪問
為什麼需要global
關鍵字?
一般來說,在函數內部,我們無法直接修
改函數外部定義的全域變數。
這是因為函數內部會創建一個新的命名空間,區域變數會優先於全域變數。
然而,如果我們確實需要在函數內修改全域變數,就必須使用global
關鍵字來明確告訴 Python 解釋器,
我們要操作的是全域變數,而不是創建一個新的區域變數。
在函數內修改全域變數:
直接修改會產生一個新的區域變數,並不會改變全域變數的值。
要修改全域變數,需要使用global
關鍵字。
globe_x = 10
def change_global():
global globe_x
globe_x = 20
change_global()
print(globe_x) # 输出 20
命名衝突: 如果區域變數和全域變數名稱相同,在函數內部會優先使用區域變數。
區域變數和全域變數是 Python 中非常重要的概念。
理解它們的作用範圍和生命週期,有助於寫出更清晰、更易於維護的程式碼。
在一般情況下,應該優先使用區域變數,並儘量避免過多地使用全域變數。
使用 global 關鍵字會直接操作全域變數,修改後的結果會反映在程式的所有部分。