Python變量引用錯誤

python UnboundLocalError: local variable 'xxx' referenced before assignment

大意就是在變量定義前就引用了變量。
錯誤代碼如下:

def f():
    print(n)
    n = 10
f()

這裏還是很清楚,很明白。
然而下面的代碼就令人有些頭疼:

n = 100
def f():
    print(n)
    n = 10
f()

雖然定義了變量n,然後在函數內部修改,但是還是報相同的錯誤。原因在於在函數內部對變量n進行修改後,變量n被python解釋器理解爲局部變量,就變成和上面代碼一樣的情況了。

def f():
    print(n)
f()

此時由於沒有定義變量n,所以報NameError: name ‘n’ is not defined
注意:
一般情況下,在訪問變量時,會先查找本地變量,然後是包裹此函數的外部函數內的變量,之後是全局變量,最後是內建作用域的變量,即:L->E->G->B(E不一定存在)。在默認情況下,變量名賦值會在當前作用域創建變量和修改變量。
作用域     英文解釋     英文簡寫
局部作用域(函數內)     Local(function)     L
外部嵌套函數作用域     Enclosing function locals     E
函數定義所在模塊作用域     Global(module)     G
python內置模塊的作用域     Bui     B

示例如下:

v = 100 # 全局作用域
def fun1():
    v = 200 # 外部嵌套函數作用域
    print('fun1.v=', v)
    print(locals())
    def fun2():
        v = 300 # 局部作用域
        print('fun2.v=', v)
        print(max) # max函數都沒有創建,在內建函數作用域中,只讀,不能改變 # 可以在其餘三個作用域重新創建。
        print(locals())
    fun2()
        
fun1()
print("全局變量.v=", v)
print(max) # max變量定義在內置模塊的作用域,是解釋執行器提前定義好的
print(locals())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章