python中的作用域以及內置函數globals()-全局變量、locals()-局部變量


在python中,函數會創建一個自己的作用域,也稱為為命名空間。這意味着在函數內部訪問某個變量時,函數會優先在自己的命名空間中尋找。

通過內置函數globals()返回的是python解釋器能知道的變量名稱的字典(變量名:值);

而locals()函數返回的是函數內部本地作用域中的變量名稱字典。由此可以看出,函數都是由自己獨立的命名空間的。

查看全局變量和局部變量:

#coding=utf-8

outerVar="this is a global variable"
def test():
    innerVar="this is a local variable"
    print "local variables:"
    print locals()

test()
print "global variables:"
print globals()   

 

結果:

 

 

通過全局變量,也可以知道內置屬性__file__指的是當前運行的文件名稱,__name__指的是__main__,也就是自己的意思

 

變量相關--變量解析規則

在python的作用域規則里面,創建變量時一定會在當前作用域里創建同樣的變量,但訪問或修改變量時,會在當前作用域中查找該變量,如果沒找到匹配的變量,就會依次向上在閉合作用域中進行查找,所以在函數中直接訪問全局變量也是可以的。

 但是變量在函數調用之前必須被聲明,否則報錯

 代碼:

#coding=utf-8

outerVar = "this is a global variable"

def test() :

  innerVar = "this is a Local variable"

  print outerVar#函數里面沒有,就去外邊找

  print n

 

n = 10

test()

 結果:

 

 

變量相關—變量生存空間

變量不僅僅是存在於一個個的命名空間中,它們還都有自己的生存周期,全局變量的生存周期是在整個程序執行期間有效,而局部變量的生存周期只在當前作用域中有效,一旦這個作用域不存在了,比如函數執行退出了,變量的生存周期就結束了。 外部不能使用函數的局部變量

代碼:

#encoding=utf-8

outerVar = "this is a global variable"

def test() :

  innerVar = "this is a Local variable"

 

test()

print innerVar

 結果:

innerVar變量是函數中的局部變量,所以在函數執行結束后,再去訪問該變量,就會報NameError錯誤。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM