Python核心丨匿名函式

2021-10-07 02:34:09 字數 2942 閱讀 1759

描述

匿名函式格式

lambda argument1, argument2,..

. argumentn : expression

匿名函式的關鍵字是lambda,之後是一系列的引數,然後用冒號隔開,最後則是由這些引數組成的表示式。

square =

lambda x: x**

2square(3)

9

寫成常規函式

def

square

(x):

return x**

2square(3)

9

匿名函式和常規函式區別

所謂的表示式,就是用一系列」公式「去表達乙個東西,比如x+2、x**2等等;

而所謂的語句,則一定是完成了某些功能,比如賦值語句x = 1完成了賦值,print語句完成了列印。

因此lambda可以用在一些常規函式def不能用的地方。

[

(lambda x: x*x)

(x)for x in

range(10

)]# 輸出[0

,1,4

,9,16

,25,36

,49,64

,81]

lambda可以被用作某些函式的引數,而常規函式def也不能。

l =[(

1,20)

,(3,

0),(

9,10)

,(2,

-1)]

l.sort(key=

lambda x: x[1]

)# 按列表中元組的第二個元素排序

print

(l)# 輸出[(

2,-1

),(3

,0),

(9,10

),(1

,20)]

常規函式def必須通過其函式名被呼叫,因此必須首先被定義。

匿名函式的設計理念就是專注簡單的任務,而常規函式則負責複雜的多行邏輯。

為什麼要使用匿名函式

使用匿名函式lambda,可以大大簡化**的複雜度,提高**的可讀性。

如果程式在不同地方包含了相同的**,那麼就把這部分相同的**寫成乙個函式,並取乙個名字,方便在相對的不同地方呼叫。

如果為了實現乙個功能的,但內容非常多,寫在一起降低了**的可讀性。

如果需要乙個函式,非常簡短,只需要一行就能完成,同時它在程式中只被使用一次,這時候使用匿名函式就會非常高效。

python函式式程式設計

所謂函式式程式設計,是指**中每一塊都是不可變的,都由純函式的形式組成。

def

multiply_2

(l):

for index in

range(0

,len

(l))

: l[index]*=2

return l

這段**就不是乙個純函式的形式,因為列表中的元素的值被改變了,如果多次呼叫函式,那麼每次得到的結果都不一樣。

# 純函式的形式

defmultiply_2_pure

(l):

new_list =

for item in l:2)

return new_list

函式式程式設計的有點,主要在於其純函式和不可變的特性使程式更加健壯,易於除錯和測試;缺點主要在於限制多,難寫。

常見的幾個函式:map()、filter()和reduce()

表示,對iterable中的每個元素,都運用function這個函式,最後返回乙個新的可遍歷的迭代器。

l =[1

,2,3

,4,5

]new_list =

map(

lambda x: x *

2, l)

# [2, 4, 6, 8, 10]

以map()函式為例,看一下python提供的函式式程式設計介面的效能。

python3 -mtimeit -s'xs=range(1000000)'

'map(lambda x: x*2, xs)'

2000000 loops, best of 5

:171 nsec per loop

python3 -mtimeit -s'xs=range(1000000)'

'[x * 2 for x in xs]'

5 loops, best of 5

:62.9 msec per loop

python3 -mtimeit -s'xs=range(1000000)'

'l = '

5 loops, best of 5

:92.7 msec per loop

map()函式直接由c語言寫的,執行時不需要通過python直譯器間接呼叫。

表示對iterable中的每個元素,都使用function判斷,並返回true或者false,最後將返回true的元素組成乙個新的可遍歷的迭代器。

l =[1

,2,3

,4,5

]new_list =

filter

(lambda x: x %2==

0, l)

# [2, 4]

表示對iterable中的每個元素以及上一次呼叫後的結果,運用function進行計算,所以最後返回的是乙個單獨的數值。

l =[1

,2,3

,4,5

]product =

reduce

(lambda x, y: x * y, l)

# 1*2*3*4*5 = 120

Python核心丨條件與迴圈

條件語句 語法if condition 1 statement 1 elif condition 2 statement 2.elif condition i statement i else statement n 整個條件語句是順序執行的,如果遇到乙個條件滿足,如condition i滿足時,在...

python匿名函式

例如 a 100 b a 這樣100只會有乙份,a和b只是指向了同乙個位置,改變a的值b也會跟著改變 當我們用id 變數 檢視兩變數的位址是相同的 可變型別 列表,字典 不可變型別 除了可變型別剩下的都是不可變型別 不可變型別舉例 a world 可以輸出a 0 整個字串也可以修改,但是要修改a 0...

python 匿名函式

在python中,對匿名函式提供了有限支援。還是以map 函式為例,計算f x x2時,除了定義乙個f x 的函式外,還可以直接傳入匿名函式 map lambda x x x,1,2,3,4,5,6,7,8,9 1,4,9,16,25,36,49,64,81 通過對比可以看出,匿名函式lambda ...