2016-05-27 62 views
2

第一個代碼段打印[0, 3] out。Python嵌套函數中的變量作用域

def func(): 
    a = [0] 

    def swim(): 
     a.append(3) 
     # a = [1]+a 
     return a 
    return swim() 

print(func()) 

的第二代碼片段引發錯誤 「UnboundLocalError:局部變量賦值之前 'A' 引用」

def func(): 
    a = [0] 

    def swim(): 
     # a.append(3) 
     a = [1]+a 
     return a 
    return swim() 

print(func()) 

a可見/訪問功能後,所有swim

+1

@Pythonista謝謝!看起來'一個'只要有一個任務就成爲一個局部變量。 –

回答

1

看來這是一個常見問題,如this link中所述。原因是swim中的變量a只要存在a的賦值就成爲本地變量。它會影響外部a,並且在分配功能swim之前未定義本地a,因此錯誤會增加。

感謝你們所有人的回答!

-1

您正在第一個代碼中追加一個元素。 aid仍然相同。

但在第二個代碼中,您將重新定義變量a,該變量正在更改該變量的id。所以你得到UnboundLocalError

-2

當您在一個範圍內執行諸如a = [1] + aa += [1]這樣的分配時,該變量將成爲該範圍的本地範圍。在你的情況下,這是功能swim()