python global和nonlocal_3.关于作用域知识的额外补充global和nonlocal关键字
本遍文章對(duì)global關(guān)鍵字和nonlocal關(guān)鍵字進(jìn)行補(bǔ)充,這兩個(gè)關(guān)鍵字在以后做python開發(fā)的時(shí)候,能不用盡量別用!最好別用!總會(huì)出現(xiàn)讓你意想不到的后果...
1.先說(shuō)第一種global,不管在任何作用域下,只要是使用global聲明的變量,都會(huì)變?yōu)槿肿兞俊?/p>
直接上例子。
首先是不使用global聲明變量。
x = 1
def f1():
x = "suhaozhi"
print x
def f2():
x = "hamasakiayumi"
print x
f1()
>>> suhaozhi
f2()
>>> hamasakiayumi
print x
>>>1
函數(shù)查找變量的默認(rèn)規(guī)則就是,先找函數(shù)內(nèi)部,當(dāng)本層函數(shù)內(nèi)部沒有這個(gè)變量,才會(huì)去外部作用域去一層一層去找,一直找到全局作用域,如果在本層找到了,就以本層內(nèi)部的變量為準(zhǔn),上面的例子就很好的印證了這一點(diǎn)。
當(dāng)使用了global聲明變量為全局變量后,函數(shù)中的內(nèi)部變量就會(huì)變?yōu)槿肿兞?#xff0c;如果變量名相同,甚至可以改變?nèi)肿兞俊?/p>
x = 1
def f1():
global x
x = "suhaozhi"
print x
def f2():
x = "hamasakiayumi"
print x
f1()
>>>suhaozhi
f2()
>>>hamasakiayumi
print x
>>>suhaozhi
#在最后可以看到,全局變量x的值被f1函數(shù)改變了,原來(lái)x = 1,現(xiàn)在x = “suhaozhi”。
2.nonlocal 修改(覆蓋)上層函數(shù)的變量。注意!!!這種nonlocal聲明在python2.x版本是不支持的!!!只有python3以上才支持。
def f1():
x = 1
print (x)
def f2():
nonlocal x
x = 2
print (x)
f2()
print (x)
f1()
>>>1
2
2
f2函數(shù)中的x變量替換掉了f1函數(shù)中的x變量。
總結(jié)
以上是生活随笔為你收集整理的python global和nonlocal_3.关于作用域知识的额外补充global和nonlocal关键字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: springboot返回modeland
- 下一篇: c++冒泡排序代码_数据结构和算法必知必