函數嵌套與裝飾器

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

位置參數: 閉包

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

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

關鍵字參數:按照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.不修改調用方式

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

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

相關文章
相關標籤/搜索