1. 程式人生 > >函式巢狀與裝飾器

函式巢狀與裝飾器

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

位置引數: 

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

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

關鍵字引數:按照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.不修改呼叫方式

目的:在遵循一二的基礎上擴充套件新功能

裝飾器與被裝飾器的物件均可以是任意可呼叫的物件