python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
在python中,函數(shù)會(huì)創(chuàng)建一個(gè)自己的作用域,也稱為為命名空間。這意味著在函數(shù)內(nèi)部訪問某個(gè)變量時(shí),函數(shù)會(huì)優(yōu)先在自己的命名空間中尋找。
通過內(nèi)置函數(shù)globals()返回的是python解釋器能知道的變量名稱的字典(變量名:值);
而locals()函數(shù)返回的是函數(shù)內(nèi)部本地作用域中的變量名稱字典。由此可以看出,函數(shù)都是由自己獨(dú)立的命名空間的。
查看全局變量和局部變量:
#coding=utf-8outerVar="this is a global variable" def test():innerVar="this is a local variable"print "local variables:"print locals()test() print "global variables:" print globals()結(jié)果:
通過全局變量,也可以知道內(nèi)置屬性__file__指的是當(dāng)前運(yùn)行的文件名稱,name__指的是__main,也就是自己的意思
變量相關(guān)–變量解析規(guī)則
在python的作用域規(guī)則里面,創(chuàng)建變量時(shí)一定會(huì)在當(dāng)前作用域里創(chuàng)建同樣的變量,但訪問或修改變量時(shí),會(huì)在當(dāng)前作用域中查找該變量,如果沒找到匹配的變量,就會(huì)依次向上在閉合作用域中進(jìn)行查找,所以在函數(shù)中直接訪問全局變量也是可以的。
但是變量在函數(shù)調(diào)用之前必須被聲明,否則報(bào)錯(cuò)
代碼:
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' #coding=utf-8 outerVar = "this is a global variable" def test() :innerVar = "this is a Local variable"print outerVar#函數(shù)里面沒有,就去外邊找print n n = 10 test()結(jié)果:
變量相關(guān)—變量生存空間
變量不僅僅是存在于一個(gè)個(gè)的命名空間中,它們還都有自己的生存周期,全局變量的生存周期是在整個(gè)程序執(zhí)行期間有效,而局部變量的生存周期只在當(dāng)前作用域中有效,一旦這個(gè)作用域不存在了,比如函數(shù)執(zhí)行退出了,變量的生存周期就結(jié)束了。 外部不能使用函數(shù)的局部變量
代碼:
#encoding=utf-8 outerVar = "this is a global variable" def test() :innerVar = "this is a Local variable" test() print innerVar結(jié)果:
innerVar變量是函數(shù)中的局部變量,所以在函數(shù)執(zhí)行結(jié)束后,再去訪問該變量,就會(huì)報(bào)NameError錯(cuò)誤。
總結(jié)
以上是生活随笔為你收集整理的python中的作用域以及内置函数globals()-全局变量、locals()-局部变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python将文本转化成语音并播放
- 下一篇: Python: max和min函数的高级