python基礎之高階函式(下)

2021-10-25 11:01:26 字數 2703 閱讀 3855

高階函式是滿足下列條件之一的即為高階函式。

#高階函式的引入

#1-1 定義乙個函式,將指定列表中的偶數,儲存到乙個新的列表中。

list

=list

(range(1

,11,1

))deffn

(a):

new_list=

for i in

list

:if i %2==

0:return new_list

print

(fn(

list))

[2,4

,6,8

,10]#1-2 將指定列表中的3的倍數,儲存到乙個新的列表中。

#只需對上述**的條件判斷進行改動。

if i %3==

0:#if i % 2 ==0改為if i % 3 ==0

#由於每次需求改變,都需要改一次**,這是乙個繁瑣的工作。由此引入高階函式:

'''(1)接收函式物件作為引數案例

'''#高階函式

'''個人理解,根據需要不同,不同需要求用乙個函式來判斷,我們在進行需要求計算時就可以直接使用包含需求判斷的函式作為高階函式的引數使用,並在高階函式中進行對應的計算。

上述案例,我們可以將條件定義為不同的函式,然後高階函式直接使用條件函式為引數。

'''#定義偶數

deffn1

(i):

if i %2==

0:return

true

#定義乙個函式 3的倍數:

list

=list

(range(1

,11,1

))deffn2

(i):

if i%3==

0:return ture

#高階函式

deffn

(func,l)

: new_list=

for i in

list

:if func(i)

:return new_list

print

(fn(fn1,

list))

##函式傳參不能帶括號,帶括號為呼叫函式,本次使用判斷為偶數的函式作為引數[2

,4,6

,8,10

]###計算3的倍數,並返回新列表,我們傳入引數函式物件fn2

deffn

(func,l)

: new_list=

for i in

list

:if func(i)

:return new_list

print

(fn(fn2,

list))

#傳入fn2函式物件[3

,6,9

]'''

(2)將函式物件作為返回值案例

filter()函式使用時,不用向上述案例一樣從新定義乙個高階函式。filtrr()函式可以對列表進行過濾--作用

#語法:

filter(function,iterable)

**引數解釋:**

function:函式物件

iterable:可迭代物件

**注意:**返回值是乙個物件

'''lsi=

list

(range(1

,11))

deffn1

(i):

if i %2==

0:return

true

print

(list

(filter

(fn1,lsi)))

#由於filter()返回值是乙個物件,所以需要將物件轉換成列表,根據需求轉換物件。

總結:

高階函式的使用,在傳入函式引數時,傳入的是函式物件,而不是呼叫函式。

便於靈活計算易變得一些條件篩選,我們可以將條件作為乙個新函式,再將新函式物件作為引數傳入高階函式進行計算。

lambda函式表示式可以用來建立一些簡單的函式,它是函式的另一種建立方式

lambda  引數列表:返回值
案例:實現兩個數a和b的和

y=

lambda a,b: a+b

print

((y)(1

,3))

##匿名函式返回乙個接受物件,並列印值,第一種列印方式

4print((

lambda a,b : a + b)(1

,3))

#第二種方式暴力列印

4

總結:

以匿名函式方式傳入引數,列印時需要將指定元素放於print()函式內,如果指定元素放於括號外,列印錯誤。

形成閉包的條件:

(1)函式巢狀

(2)將內部函式作為返回值返回

(3)內部函式必須要使用外部函式的變數

我們可以直接通過修改函式中的**去完成這個需求,但是會產生一些問題

在對程式進行擴充套件時,需要從新定義乙個新的函式,然後呼叫源程式並新增新的計算方法,每次對程式擴充套件時都需要從新定義函式,該步驟過於麻煩,因此,引入是否有乙個東西,可以不用每次做程式開發時,不用從新定義函式,-答案是肯定的,那就是裝飾器。使用裝飾器可以在程式擴充套件時不用從新定義函式。

Python之高階函式

一 什麼是高階函式 函式作為實參傳遞給函式的或者函式名為返回值的函式稱為高階函式。1 實參傳遞給函式 2 函式名為返回值 二 系統內建的高階函式 1 map函式 至少需要兩個引數,第乙個引數是函式名,第二個引數是序列 str,list,tuple map功能 把序列中的每乙個元素作為引數,傳給函式進...

Python之高階函式

做過swift開發的童鞋都知道,在swift中有許多的高階函式 map,filter,reduce,zip等 這些在開發中讓我們節省大量 python中同樣有許多的內建函式,但是這裡也只介紹幾個常用的高階函式 根據提供的函式對指定序列做對映,並返回對映後的序列 map function,iterab...

python之高階函式

函式程式設計及其優勢 無 不修改狀態,表示式形式,專注與計算,接近自然語言。便於 熱公升級,無狀態不用考慮併發過程中的資源搶占及鎖問題。函式也是物件,也可以賦值給變數,當然函式的引數也可以為另一函式。map 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依...