1. 程式人生 > >Python:函數名稱空間與作用域:

Python:函數名稱空間與作用域:

int 直接 返回 nbsp 作用 返回值 local 解析 運行

Python:函數名稱空間與作用域

函數對象:(第一類對象)

  定義:函數是第一類對象:函數名可以當做數據來使用

        1.可以直接被引用,加()就能運行
        def foo():
            print("from foo")
        f=foo
        f()
        
        2.可以當作參數傳入另一個函數
        def warpper(x):
            x()            
        warpper(foo)
        
        3.可以當作另外函數的返回值
        
def warpper2(): return foo f=warpper2() print(f is foo) 4.可以當作容器類型的一個元素 l=[foo,1,2] l[0]()

名稱空間:

  定義:存放名字與值綁定關系的地方(實際上是一塊隔離的內存空間)

  分類:   

    內置名稱空間:
        存放的是:內置的名字與值的綁定關系
        生效:python解析器啟動
        失效:python解析器關閉

    全局名稱空間:
        存放的是:文件級別定義的名字與值的綁定
        生效:執行python文件時,以該文件級別定義的名字與值的綁定關系
        失效:文件執行完畢

    局部名稱空間:
        存放的是:函數內部定義的名字與值的綁定關系
        生效:調用函數時,臨時生效
        失效:函數調用結束

    

    加載順序:先內資,再全局,最後局部
    尋找順序:先局部,再全局, 最後內置

作用域:     

  註意:作用域關系,在函數定義時,就已經固定了,與調用位置無關。
   使用函數對象可以打破作於域的層級關系。
    

    全局作用域:包含內置名稱空間與全局名稱空間。
    全局存活,全局生效
        globals(),顯示全局作用域中的名字對應關系

局部作用域:包含局部名稱空間
     臨時存活,局部生效
locals(),顯示當前局部作用域中的名字對應關系

    相關關鍵字:都是在函數內部使用

global 申明使用全局作用域中的名字
       nonlocal 申明不使用的本級局部作用域中的名稱

Python:函數名稱空間與作用域: