局部作用域和全局作用域:局部作用域不能修改全局作用域的變量
count = 10 def outer(): #global count 局部變量改成全局變量,global聲明一下即可。就可以修改了。 print(count) #全局變量可以在局部調用但是不可以修改。 count+=1 #報錯, count = 1 #這里並不是修改了全局變量count,而是重新定義了一個新的局部變量count print(count) outer()
外層作用域:nonlocal
def outer(): count=10 def inner(): nonlocal count #跟global作用一樣,在這一層用 count=20 inner() print(count) outer()
小結:
1.變量查找順序:LEGB
局部作用域>外層作用域>當前模塊中全局>python內置作用域;
2.只有模塊/類/函數能引入新作用域;
3.變量:內部作用域先聲明就覆蓋外部變量,不聲明直接用就會使用外部作用域變量;
4.內部域修改外部域變量,全局變量用global,嵌套域變量用nonlocal。