1. 程式人生 > >函數嵌套與裝飾器

函數嵌套與裝飾器

**kwargs 關鍵字參數 全部 閉包 lob 函數的調用 glob 閉包函數 函數的參數

*應用場景,位置參數中代表將多個參數存入元祖,**將關鍵字參數傳入字典

位置參數:

    位置形參:必須被傳值,一一對應

    位置實參:按從左到右的順序與形參一一對應

關鍵字參數:按照key=value形式指名道姓的為形參傳值,可以完全不按照順序

1.關鍵字實參必須在位置參數的後面

2.可以混用位置實參與關鍵字實參,但不能為同一個形參重復傳值

默認參數:
  形參有默認值

可變長參數

形參:*args,**kwargs將多余的參數分別封裝成元祖與字典

實參:將args kwargs分別打散

什麽是命名關鍵字參數?

格式:在*後面參數都是命名關鍵字參數

特點:必須被傳值

2.約束函數的調用者必須按照key=value的形式傳值

3.約束函數的調用者必須使用我們指定的鍵名

在面向對象編程中,一切皆對象

具體的體現為:

1:函數可以被引用

2:函數可以作為函數的參數

3:函數可以作為函數的返回值

4:可以被存儲到容器類型中

2.函數嵌套

1.嵌套調用:在一個函數中調用了另一個函數

2:嵌套定義 在一個函數中定義了另一個函數

3.名稱空間

存儲變量名與值綁定關系的地方

名稱空間的分類

  內置名稱空間:存儲解釋器自帶的一些名稱與值得對應關系

  (Python解釋器啟動時創建所有代碼全部執行完畢 關閉解釋器時銷毀)

  如 print len max min

  全局名稱空間 哪些數據在全局空間?

    文件級別的名稱 只要你的名字的定義是頂著最左邊寫的就是全局空間

    除了內置的函數內的,都在全局中(執行Python文件創建全局名稱空間 關閉解釋器時 銷毀)

   局部名稱空間 只要是函數內的名稱就是局部的

    (調用函數時創建 函數執行完畢時銷毀)

  名稱空間的加載順序

  內置的-全局的-局部的

  名稱的查找順序

  局部-全局的-內置的

4.作用域(作用範圍)

域 指的是區域 範圍的意思

全局的名稱空間和內置的名稱空間 在使用上沒什麽區別

局部的和全局的內置的 就區別了 局部定義的只能在局部使用

給三個空間劃分範圍

全局的和內置可以劃分為同一個範圍

global表示的全局範圍,就是所謂的全局作用域

局部的單獨劃分為一個範圍

local 局部作用域

5.閉包函數

閉包函數 也是一個函數

與普通函數的區別

1.定義在另一個函數中的

2.在這個內部的函數中使用了外部的名稱

閉包函數,當調用一個函數內部的函數時,還將返回外部函數的數據,這樣的函數稱之為閉包函數:定義在一個函數內部,且訪問外部函數的數據

函數的作用域在定義時就固定了,與調用的位置毫無關系

——closure_用於訪問閉包時,打包的數據

為函數體傳值的方式

方式一:將值以參數的形式的傳入

方式二:在函數內部為變量賦值

什麽是裝飾器?

  什麽是裝飾 給一個已有的對象(一個函數)添加新的功能

    為什麽要裝飾 增強功能

裝飾器就是給其他函數添加功能的函數

無參裝飾器格式:

def outer(func):
  def inner(*args,**kwargs):
    res = func()
    return res
   return inne

開放關閉原則

  軟件一旦上線後,就應該遵循開放關閉原則,即對修改源代碼是封閉的,對功能的擴展是開放的

也就是說我們必須找到一種解決方案

  能夠在不修改一個功能源代碼以及調用方式的前提下,為期加上新功能

總結:原則如下

1.不修改源碼

2.不修改調用方式

目的:在遵循一二的基礎上擴展新功能

裝飾器與被裝飾器的對象均可以是任意可調用的對象

函數嵌套與裝飾器