最近在看python中nonlocal和global的使用渊涝,參考網(wǎng)上的大作慎璧,寫了點(diǎn)自己的心得。有不完善的地方跨释,還請(qǐng)不吝賜教胸私。
- 局部變量作用在函數(shù)范圍內(nèi),如果超出函數(shù)的作用范圍鳖谈,則對(duì)局部變量所作的操作岁疼,都將‘’失效“。
- 全局變量在函數(shù)內(nèi)訪問缆娃,但是要修改的話捷绒,需要加global關(guān)鍵字,這樣對(duì)全局變量的操作不會(huì)因?yàn)槌龊瘮?shù)范而”失效“贯要。
- nonlocal關(guān)鍵字可將局部變量轉(zhuǎn)為非局部變量暖侨,這樣就可以在嵌套的函數(shù)內(nèi)訪問和修改。
spam='hello' #這是一個(gè)全局變量
def test():
def do_local():
spam='do_local'#創(chuàng)建一個(gè)局部變量
def do_nonlocal():
#變量用在嵌套作用域上
nonlocal spam
spam='do_nolocal'
def do_global():
#可以訪問和修改全局變量崇渗,如果沒有則創(chuàng)建一個(gè)全局變量
global spam
spam='do_global'
spam='hello world'
print('before do anything :',spam)
do_local()
print('after do_local: ',spam)
do_nonlocal()
print('after do_nonlocal: ',spam)
do_global()
print('after do_global: ',spam)
test()
print('全局變量',spam)
print(dir())#查看定義的全局變量
程序運(yùn)行結(jié)果:
before do anything : hello world
after do_local: hello world
after do_nonlocal: do_nolocal
after do_global: do_nolocal
全局變量 do_global
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'spam', 'test']
- 總結(jié)一下
global關(guān)鍵字申明的變量必須在全局作用域上字逗,而如果在嵌套作用域中京郑,則需要使用nonlocal關(guān)鍵字申明變量。 - 使用global可以訪問和修改全局變量葫掉,如果沒有全局變量些举,則創(chuàng)建一個(gè)新的全局變量。
- 這里需要注意python的變量作用域挖息,請(qǐng)移步
- 參考文章:python官方文檔金拒,Linux中國