12 - 閉包&裝飾器

返回主頁

📄目錄

1 遞歸函數

1.1 含義和條件

💡 含義:一個函數在內部不調用其他函數,而調用其本身,就是遞歸函數。

💡 條件:

1.2 例子

python-logo

輸出結果:

python-logo

遞歸函數

輸出結果:

1.2.1 實現斐波那契數列

1, 1, 2, 3, 5, 8, 13, ...

規律:從第三項開始,每一項都等於前兩項之和,即n = (n-2) + (n-1),n代表當前項

python-logo

輸出結果:

1.3 優缺點

優點:簡潔、邏輯清晰、解題更具有思路

缺點:使用遞歸函數的時候,需要反復調用函數,耗內存,運行效率低

❗ 代碼不冗長的時候不建議使用遞歸

2 閉包 B-Box

2.1 條件和格式

2.1.1 條件

2.1.2 格式

python-logo

輸出結果:

python-logo

輸出結果:

2.2 函數引用

python-logo

輸出結果:

💡 留意引用位值與函數值相關,但與函數名無直接關係

python-logo

輸出結果:

2.3 每次開啟內函數都在使用同一份閉包變量

python-logo

輸出結果:

總結:

3 裝飾器

含義:本質上是一個*python閉包函數*,好處是在不修改原有代碼的前提下增加額外功能,其返回值也是一個函數對象

作用:在不改變原有代碼的情況下添加新功能

條件:

  1. 不修改源程序或函數的代碼

  2. 不改變函數或程序的調用方法

python-logo

👉🏻 沒有裝飾器:

輸出結果:

3.1 標準版裝飾器

python-logo

輸出結果:

💡 裝飾器的原理就是將原有的函數名重新定義為以原函數為參數的閉包

3.2 語法糖

格式:@裝飾器名稱

python-logo

輸出結果:

3.3 被裝飾的函數有參數

python-logo

輸出結果:

3.4 被裝飾的函數有可變參數*args,**kwargs

python-logo

輸出結果:

3.5 多個裝飾器

💡多個裝飾器的裝飾過程:離函數最近的裝飾器先裝飾,然後由內至外的裝飾器逐個裝飾

python-logo

輸出結果:

@deco2先裝飾:

'內左 ' + fn() + ' 內右' -> '內左 ' + '中央' + ' 內右'

@deco1後裝飾:

'外左 ' + fn() + ' 外右' -> '外左 ' + '內左 ' + '中央' + ' 內右' + ' 外右'

導航連結:

目的地超連結
首頁返回主頁
Python學習Python學習
上一篇11 - 異常、模塊、包
下一篇13 - 面向對象基礎