作用域是程式中定義變數的可見範圍,決定了在程式的哪些段落可以存取或修改特定的變數。掌握作用域的運作邏輯,對於撰寫清晰、高效且易於維護的程式碼非常重要。
操場 > 教室
在這邊定義的變數我們稱作全域變數,可以被所有作用域存取。
相當於站在操場上的任何同學(全域變數),都可以被所有人呼叫。
在這邊定義的變數稱作局部變數,只能被局部作用域或更低階的作用域存取。
相當於坐在教室內的同學(局部變數),只能被教室內的同學或老師呼叫。
由於著名的鮭魚之亂事件,現在每個班級都有個叫做 "鮭魚" 的同學,當老師在教室內呼喊「鮭魚」時,只會有該教室的「鮭魚」給予回應。
在不同作用域時可以有相同變數名稱,且彼此互不影響。
如果老師在教室內呼喊「鮭魚」沒有人回應時,老師才會走到操場再次呼喊「鮭魚」。
程式在尋找變數時,會先從內層作用域開始,逐層向上。
我們透過簡單的購物系統折扣計算來說明作用域在商務邏輯中的實際應用。假設我們正在開發一個簡單的購物車系統,需要根據客戶等級(VIP, 一般會員, 非會員)計算不同折扣:
# 全域變數
MEMBER_DISCOUNT = 0.9 # 加入會員享全站 10% 折扣
def calculate_discount(user_type, purchase_amount):
# 局部變數
vip_discount = 0.8 # 升級VIP獲得全站 20% 折扣
if user_type == "VIP":
# 使用局部變數 vip_discount
discount = vip_discount
elif user_type == "Member":
# 使用全域變數 MEMBER_DISCOUNT
discount = MEMBER_DISCOUNT
else:
discount = 1 # 非會員沒有折扣
# 計算折扣後金額
final_price = purchase_amount * discount
return final_price
在這個例子中:
MEMBER_DISCOUNT
是全域變數,代表所有會員的基本折扣。vip_discount
是局部變數,只在 calculate_discount()
函式內可見。discount
, final_price
也是局部變數,僅在函式內有效。這個簡單的例子展示了如何使用作用域來組織程式碼,使其更加清晰和易於管理。
理解作用域的運作是寫出乾淨程式碼的關鍵。適當運用局部變數不僅能提高程式的可讀性和安全性,還能有效管理記憶體。在實際開發中,應盡量使用最小必要的作用域,這樣可以減少錯誤,提高程式碼的可維護性。