1. 程式人生 > >day 12 名稱空間和閉包函式

day 12 名稱空間和閉包函式

函式巢狀

  按照函式的兩個階段分為:

    巢狀呼叫:在一個函式內部呼叫另一個函式

    巢狀定義:在一個函式內部定義另一個函式

名稱空間(namespace):儲存名字的記憶體區域

名稱空間的分類:

  內建名稱空間:存的是直譯器自帶的名稱

  全域性名稱空間:只要是頂著最左邊寫的,沒有任何縮排,就在全域性名稱空間中

        注意在if中如果if是頂著最左邊的沒有縮排,那麼if裡面的名字也在全域性名稱空間中,while,for with同樣如此

  區域性名稱空間:存的是函式內定義的名字

  名稱空間的載入順序

    內建  -->  全域性  -->   區域性

    名字的查詢順序

    區域性  -->  全域性  -->  內建

作用域

  指的是名字生效的有效空間

儲存名字的有三個地方

  內建名稱空間

  全域性名稱空間

  區域性名稱空間

全域性作用域:

  內建空間和全域性空間都是同一個範圍,都是全域性作用域

區域性作用域:

  區域性名稱空間歸為區域性作用域

global(全域性)  與nonlocal(不使用本地)關鍵字

global

  當需要在函式內修改全域性中名字的值需要使用global

  注:必須在使用這個名字之前宣告(global)

nonlocal

  當需要在內層函式中修改外層函式中的名字的時候就使用nonlocal關鍵字

  會一層一層往外層查詢,直到找到了為止,不會尋找到全域性作用中,最後一層函式中沒有找到就會報錯

 

函式物件

函式是第一物件

  1.能夠被呼叫

  2.可以當做容器型別的元素

  3.可以當做函式的引數

  4.可以當做函式的返回值

函式名除了可以呼叫之外,其他的都與一個變數名沒喲本質區別

 

閉包函式:

  閉包函式:就是在一個函式定義另一個函式

  閉包函式也是一種函式

  特點是:

  1.該函式是定義在另一個函式中

  2.該函式包含了對外層函式中名字的引用,滿足以上兩條就是閉包函式

 注意:名字所在的作用域,在函式定義階段就已經固定了