Python中的作用域是什麼

bluepeach發表於2021-09-11

Python中的作用域是什麼

python中的作用域有4種:

1562378758(1).png

搜尋變數的優先順序順序依次是(LEGB):

作用域區域性 > 外層作用域 > 當前模組中的全域性 > python內建作用域。

number = 10             # number 是全域性變數,作用域在整個程式中
def test():
    print(number)
    a = 8               # a 是區域性變數,作用域在 test 函式內
    print(a)
test()

執行結果:

10
8
def outer():
    o_num = 1          # enclosing
    i_num = 2          # enclosing
    def inner():
        i_num = 8      # local
        print(i_num)   # local 變數優先
        print(o_num)
    inner()
outer()

執行結果:

8
1
num = 1
def add():
    num += 1
    print(num)
add()

執行結果:

UnboundLocalError: local variable 'num' referenced before assignment

相關推薦:《》

如果想在函式中修改全域性變數,需要在函式內部在變數前加上global關鍵字。

num = 1                    # global 變數
def add():
    global num             # 加上 global 關鍵字
    num += 1
    print(num)
add()

執行結果:

2

同理,如果希望在內層函式中修改外層的 enclosing 變數,需要加上 nonlocal 關鍵字

def outer():
    num = 1                  # enclosing 變數
    def inner():
        nonlocal num         # 加上 nonlocal 關鍵字
        num = 2
        print(num)
    inner()
    print(num)
outer()

執行結果:

2
2

另外我們需要注意的是:

1.只有模組、類、及函式才能引入新作用域;

2.對於一個變數,內部作用域先宣告就會覆蓋外部變數,不宣告直接使用,就會使用外部作用域的變數(這時只能檢視,無法修改);

3.如果內部作用域要修改外部作用域變數的值時, 全域性變數要使用 global 關鍵字,巢狀作用域變數要使用 nonlocal 關鍵字。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2558/viewspace-2837190/,如需轉載,請註明出處,否則將追究法律責任。

相關文章