Python變量作用域:全局和局部變量
1. 局部變量
# 局部變量示例
def calculate_sum():
# x 和 y 是局部變量
x = 10
y = 20
return x + y
# 函數外部無法訪問局部變量
print(calculate_sum()) # 輸出:30
# print(x) # 錯誤:NameError: name 'x' is not defined
2. 全局變量
# 全局變量示例
message = "Hello, World!" # 全局變量
def print_message():
print(message) # 可以讀取全局變量
def modify_message():
global message # 使用global關鍵字修改全局變量
message = "Hello, Python!"
print_message() # 輸出:Hello, World!
modify_message()
print_message() # 輸出:Hello, Python!
3. 變量作用域規則
LEGB規則:
- Local(局部作用域)
- Enclosing(嵌套作用域)
- Global(全局作用域)
- Built-in(內置作用域)
# LEGB規則示例
x = 'global'
def outer():
x = 'outer'
def inner():
x = 'inner'
print('inner x:', x)
inner()
print('outer x:', x)
outer()
print('global x:', x)
4. global和nonlocal關鍵字
# global關鍵字示例
counter = 0
def increment():
global counter
counter += 1
# nonlocal關鍵字示例
def outer():
count = 0
def inner():
nonlocal count
count += 1
return count
return inner
counter_func = outer()
print(counter_func()) # 1
print(counter_func()) # 2
練習題
-
創建一個計數器函數,使用全局變量記錄調用次數
-
實現一個函數,可以修改外部作用域的變量
常見錯誤和注意事項
- 在函數內部修改全局變量前必須使用global聲明
- 避免過度使用全局變量
- 注意變量名衝突
- 合理使用作用域可以提高代碼的可維護性