流暢的python第五章一等函式學習記錄

2022-05-09 01:00:06 字數 2177 閱讀 4434

在python中,函式是一等物件,一等物件是滿足以下條件的程式實體

1在執行時建立

2能複製給變數或資料結構的元素

3能作為引數傳給函式

4能作為函式的返回結果

高階函式(接受函式作為引數或者把函式作為結果返回的函式),如map和sorted函式

map,filter和reduce的替代品

map和filter現在可以使用列表推導來替代

reduce在python2是內建函式,python3中放到functools模組裡了。最常用於求和,現在最好使用內建sum函式,可讀性和效能更高。

匿名函式

lambda關鍵字在python表示式內建立匿名函式

除了作為引數傳給高階函式,python很少使用匿名函式,由於句法的限制,非平凡的lambda表示式要麼難以閱讀要麼無法寫出

如果lambda表示式導致一段**難以理解,建議進行以下重構

1編寫注釋,說明lambda表示式的作用

2研究注釋,找出乙個名稱來概括注釋

3把lambda表示式轉換成def語句,使用那個名稱來定義函式

4刪除注釋

可呼叫物件

如果想判斷物件能否呼叫,可以使用內建的callable()函式,python資料模型文件列出了7種可呼叫物件

1使用者定義的函式(使用def語句或lambda表示式建立)

2內建函式(使用c語言或者cpython實現的函式,如len或time.strftime)

3內建方法(使用c語言實現的方法,如dict.get)

4方法(在類的定義體中定義的函式)

5類6類的例項(如果類定義了__call__方法,那麼它的例項可以作為函式呼叫)

7生成器函式(使用yield關鍵字的函式或方法,呼叫生成器函式返回的是生成器物件)

使用者定義的可呼叫型別

只需實現例項方法__call__,任何python物件都可以表現的像函式

函式自省

用dir函式可以檢視函式物件有哪些屬性或者方法

獲取關於引數的資訊

函式物件有個__defaults__屬性,它的值是乙個元組,裡面儲存著定位引數和關鍵字引數的預設值。僅限關鍵字引數的預設值在__kwdefaults__屬性中。然而,引數的名稱在__code__屬性中,它的值是乙個code物件引用,自身也有很多屬性。

引數名稱在__code__.co_varnames中,裡面還有函式定義體中建立的區域性變數,因此,引數名稱是前n個字串,n的值由__code__.co_argcount確定。順便說一下,這裡不包含字首為*或** 的變長引數。引數的預設值只能通過他們在__defaults__元組的位置確定,因此要從後向前掃瞄才能把引數和預設值對應起來

更好的方式

函式註解

這個函式註解目前看來沒什麼用

支援函式式程式設計的包

operator模組

operator模組中定義的部分函式

使用functools.partical凍結引數

流程的Python 第五章 一等函式

前言 python函式的一等本性,這意味著,我們可以把函式賦值給變數 傳給其他函式 儲存在資料結構中,以及訪問函式的屬性,供框架和一些工具使用。目錄 內容回顧 相關資料 閱讀後感 正文 一.內容回顧 1.1 把函式視作物件 通過別的名稱使用函式,再把函式作為引數傳遞,典型的函式式程式設計。如下 co...

python第五章 Python學習(第五章)

記錄所有的名片字典 card list defshow menu 顯示資訊 print 50 print 歡迎使用 名片管理系統 v1.0 print print 1.新增名片 print 2.顯示全部 print 3.搜尋名片 print print 0.退出系統 print 50 defnew ...

python學習第五章

1.把某件事作為另一件事匯入 import somemodule或from somemodule import somefunction或者from somemodule import somefunction,anotherfunction,yetanotherfunction或者from som...