2020-10-20
第八章 函式(下)
8.1 間接呼叫函式
前面呼叫函式時,使用函式名加引數列表的形式呼叫。除此之外,還可以將函式名賦值給一個變數,再通過變數名加引數列表的形式間接呼叫函式
另外,函式名還可以作為其他資料型別的元素
8.2 匿名函式
匿名函式是指沒有函式名稱的、臨時使用的微函式。它可以通過lambda表示式來宣告
使用lambda表示式宣告的匿名函式也可以作為自定義函式的實參
此外,lambda表示式宣告的匿名函式還可以作為內建函式的實參
lambda表示式表示一個匿名函式,也可以作為列表或字典的元素
8.3 閉包
在前面章節中,函式可以通過return返回一個變數。此外,函式也可以返回另外一個函式名
將一個函式的定義巢狀到另一個函式中,還有其他的作用
8.4 裝飾器
8.4.1 裝飾器的概念
裝飾器本質上還是函式,可以讓其他函式在不做任何程式碼修改的前提下增加額外功能。
它通常用於有切面需求的場景,例如,插入日誌、效能測試、許可權校驗等.
從程式執行結果可看出,呼叫函式decorated()的返回值為2,呼叫func()函式的返回值為1,兩者都輸出“func()函式”,此時稱變數decorated是func的裝飾版
8.4.2 @符號的應用
使用變數名將裝飾器函式與被裝飾函式聯絡起來。
此外,還可以通過@符號和裝飾器名實現兩者的聯絡.
8.4.3 裝飾有引數的函式
裝飾器除了可以裝飾無引數的函式外,還可以裝飾有引數的函式
8.4.4 帶引數的裝飾器——裝飾器工廠
裝飾器本身也是一個函式,即裝飾器本身也可以帶引數,此時裝飾器需要再多一層內嵌函式
8.5 偏函式
函式最重要的一個功能的是複用程式碼,有時在複用已有函式時,可能需要固定其中的部分引數,除了設定預設值引數外,還可以使用偏函式(用來固定函式呼叫時部分或全部引數的函式叫偏函式)
8.6 常用的內建函式
在Python中,內建函式是被自動載入的,可以隨時呼叫這些函式,不需要定義,極大地簡化了程式設計。
8.6.1 eval()函式
eval()函式用於對動態表示式求值
eval(source,globals=none,locals=none)
其中,source是動態表示式的字串,globals和locals是求值時使用的上下文環境的全域性變數和區域性變數,如果不指定,則使用當前執行上下文。
8.6.2 exec()函式
exec()函式用於動態語句的執行
8.6.3 compile()函式
compile()函式用於將一個字串編譯為位元組程式碼
8.6.4 map()函式
程式中經常需要對列表和其他序列中的每個元素進行同一個操作並把其結果集合起來
8.6.5 filter()函式
filter()函式可以對指定序列進行過濾操作
8.6.6 zip()函式
zip()函式用於將一系列可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的迭代物件
在zip()函式中還可以使用*運算子