描述
匿名函式格式
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 ...