----- main ----n = 100, m = 200---- subpro -----n = 110, m = 20----- main ----n = 110, m = 200---- subpro -----n = 120, m = 20----- main ----n = 120, m = 200
global02.py
def subpro(): # 明確宣告 n 屬於全域變數。這代表在函式內對 n 所做的任何修改,都會直接影響並修改外面的全域變數 n global n # 將目前的全域變數 n 加上 10。 n = n + 10 # 沒有使用 global 宣告,因此這裡的 m 是一個獨立的區域變數(Local Variable),僅在 subpro() 內部有效,不會影響外面的全域變數 m。 m = 20 print('---- subpro -----') print(f'n = {n}, m = {m}')# 初始化全域變數 n = 100 與 m = 200n = 100m = 200print('----- main -----')# 首次印出全域變數。此時 n 為 100,m 為 200。print(f'n = {n}, m = {m}')"""因為有 global n,全域變數 n 被修改為 100 + 10 = 110區域變數 m 設定為 20。函式內部印出:n = 110, m = 20。"""subpro()print('----- main -----')# 再次印出全域變數。"""n 變成了 110(因為被 subpro 內的 global n 修改了)。m 依然是 200(因為函式內的 m = 20 只是區域變數,離開函式後就消失了)。"""print(f'n = {n}, m = {m}')# 第二次呼叫 subpro() 函式。"""此時全域變數 n 從 110 再次加上 10,變成了 110 + 10 = 120區域變數 m 再次被設定為 20。函式內部印出:n = 120, m = 20。"""subpro()print('----- main -----')# 最後印出全域變數。"""n 變成了 120。m 依然維持 200。"""print(f'n = {n}, m = {m}')