四)一等函式

2022-03-16 17:19:55 字數 2028 閱讀 3583

一等物件滿足以下條件:執行時建立、能賦值給變數或資料結構中的元素、能作為引數傳給函式、能作為函式的返回結果。 整數、字串、字典以及函式,都是一等物件。

一、把函式視作物件

可以把函式進行賦值呼叫

二、高階函式  

1、接受函式為引數,或者把函式作為返回結果的函式是高階函式(high-order)。

如上例的map,以及內建函式sorted,key引數用於提供乙個函式,filter以及reduce也是,不過多數場景下都有更好的替代品。

2、map、filter和reduce的現代替代品

列表推導或生成器表示式具有map和filter功能,而且更易於閱讀。

在python3中,map和filter返回生成器(一種迭代器),因此直接替代的產品是生成器表示式。

在python2中,這兩個函式返回列表,因此直接替代的是列表推導

reduce通常用於求和(此時可直接用sum替代),此外all(iterable), iterable所以元素為真,返回true。any(iterable)乙個元素為真,返回true

三、匿名函式

匿名函式通常用作高階函式的引數。lambda表示式會建立函式物件(可呼叫物件的一種)。

四、可呼叫物件

1、可以使用()的物件。通過呼叫callable()函式可判斷物件能否呼叫;

2、python資料型別中,七種可呼叫物件:使用def語句或者lambda表示式建立、內建函式(如len)、內建方法(如dic.get)、方法(類中定義的函式)、

類、類的例項(需定義__call__方法)、生成器函式(yield)

五、使用者定義的可呼叫型別

不僅python函式是物件,物件也可以表現得像函式(實現__call__方法)。

六、函式引數:從定位引數到僅限關鍵字引數

name: 定位引數       *content:第乙個引數後任意個引數由其捕獲,並存入元組      

cls: 關鍵字引數   **attrs:捕獲沒有明確指定名稱的關鍵字引數,並存入字典   

定義函式時,若想指定僅限關鍵字引數,要把它們放到前面有*引數的後面。如果不想支援數量不定的定位引數,可在簽名中放乙個*

此時呼叫f(1,3,b=2)會報錯。

七、支援函式式程式設計的包

1、operator模組

operator中,為多個運算子提供了對應的函式;

還有itemgetter和attrigetter,從序列中取出元素或讀取物件屬性,避免使用lambda表示式。

2、使用functools.partial凍結引數

這個高階函式用於部分應用乙個函式:基於乙個函式建立乙個新的可呼叫物件,把原函式的某些引數固定

一等公民的函式

所謂的 一等公民 指的是函式與其他的資料型別可以同等對待,如存入陣列,作為引數等等。先看個例子 const hi name hi const greeting name hi name 這裡的對hi這個函式又給與了重新的傳參操作,其實大可不必如此,因為hi已經被函式定義過了,在函式程式設計的思維中,...

Headfirst JS 函式是一等公民

目錄 一 函式表示式和函式宣告的底層實現 1 函式宣告 2 函式表示式 匿名函式 3 瀏覽器處理函式宣告的流程 4 將函式位址拷貝給函式指標變數的好處 5 使用函式宣告和函式表示式的細微差別 6 一等值 具有以下性質的值稱為以一等值 function quack num function creat...

go函式作為一等民

package main import fmt type operation func a,b int int func add a,b int int func main package main import fmt type operation func a,b int int func ad...