1.變數範圍

x = 10 # 全域變數
y = 10
def a():
    x = 100 # 變數範圍是在指定value時才會建立,區域變數,跟全域變數的x是不同的
    # 使用變數時,先從當前的範圍開始找,找不到才往外找
    # 此區域變數在function結束時就被消滅
    print(x)
    print(y)

a() # 100 10
print(x) # 10,調用全域變數

2.global

x = 10
def a():
    global x # 如果想修改全域變數,要加個global statement
    x = 20  # 這樣就是修改全域變數了

print(x) # 10
a()
print(x) # 20

# 但下面這種會出錯,因為print(x)是使用區域變數!
x = 10
def a():
    print(x)
    x = 20

a()

3.nonlocal

# 在python3中新增加的功能
# 可以讓我們找到上一層的變數,順序是按LEGB來尋找,也就是函式(Local)、閉包(Enclosing function)、全域(Global)、內建(Builtin)的順序來尋找
x = 10
def outer():
   x = 100         # 這是在 outer() 函式範圍的 x
   def inner():
       nonlocal x
       x = 1000    # 改變的是 outer() 函式的 x,nonlocal會幫我們尋找到上一層的x,也就是x=100
   inner()
   print(x)        # 1000,修改的是x=100
outer()
print(x)           # 10

results matching ""

    No results matching ""