- 函數作爲返回值
- 高階函數可以接受函數作爲參數,還可以把函數作爲返回值。
- 閉包
- 注意到返回的函數在其定義內部引用了局部變量
args
,所以,當一個函數返回了一個函數後,其內部的局部變量還被新函數引用,所以,閉包用起來簡單,實現起來可不容易。
- 返回的函數並沒有立即執行,直到調用才執行。
- 返回閉包時牢記的一點就是:返回函數不要引用任何循環變量,或者後續會發生變化的變量。
- 如果一定要引入循環變量:再創建一個函數,用該函數的參數綁定循環變量當前值。
- 匿名函數
- 關鍵字
lambda
表示匿名函數,冒號前的x
表示函數參數。
- 匿名函數也是一個函數對象,也可以把匿名函數賦值給一個變量,再利用變量來調用。
python
>def build(x,y):
> return lambda: x*x + y*y
Python 對匿名函數支持有限。
裝飾器
- 在代碼運行期間動態增加功能,稱爲“裝飾器”(decorator),其本質是 一個返回函數的高階函數。
偏函數
- 偏函數也能降低函數的難度。
- 當函數的參數個數太多,需要簡化時,使用
functools.partial
可以創建一個新的函數,這個新函數可以固定住原函數的部分參數,從而在調用時更簡單。