Lambda及常用內嵌函式詳解

2021-09-11 22:16:54 字數 3306 閱讀 5113

直接進入主題

常見的lambda呼叫方式為

>>> a = lambda x,y:x+y

>>> a(2,3)

簡單解釋一些,第一行可以理解為lambda宣告,x,y是傳入的引數,x+y則是函式引數,最後會返回函式的值。lambda作為乙個表示式,定義了乙個匿名函式,上例的**x,y為入口引數,x+y為函式體。python允許用lambda關鍵字創造匿名函式。匿名是不需要以標準的方式來宣告,比如說使用 def 語句。

作為函式,它們也能有引數。乙個完整的 lambda"語句"代表了乙個表示式,這個表示式的定義體必須和宣告放在同一行。語法如下:

lambda [arg1[, arg2, ... argn]]: expression
lambda函式與def函式的異同點

相同點:基本用法相同,引數都是可選的,也都會返回物件

不同點:lambda可以是乙個匿名函式,不用起函式名,但def必須有函式名;lambda是乙個表示式,而不是乙個語句,所以它可以出現在很多def不能存在的地方,比如在乙個列表常量中或者函式呼叫的引數中。lambda的主體是乙個單個的表示式,而不是乙個**塊。(lambda』s body is a single expression, not a block of statements.),lambda裡面的語句相當於def中return中的**一樣。只能是簡單的表示式,所以說lambda的能力小於def,在lambda中只能使用簡單的語法,不能使用if else while return等語句

設計理念為:lambda是乙個為編寫簡單的函式而設計的,而def用來處理更大的任務。

lambda函式的設計對於計算量小的可以節省空間,並且**書寫簡單,比如

>>> map(lambda y:y*y,[y for y in range(10)])

>>> def sq(x):

... return x*x

...>>> map(sq,[y for y in range(10)])

以上兩種方式,第一種更簡潔,要優於第二種方法。

lambda函式通常用來編寫跳轉表(jump table),也就是行為的列表或字典,能夠按照需要執行相應的動作。如下段**所示。

>>> l = [lambda x:x**2,lambda x:x**3,lambda x:x**4]

>>> for f in l:

... print(f(2))

...4

816

總結:

1、lambda只是乙個表示式,函式體比def簡單很多

2、lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去

3、lambda函式擁有自己的名字空間,且不能訪問自有引數列表之外或全域性名字空間裡的引數

4、 簡單單行**或者一次性的函式可以用lambda函式來書寫,可以讓**更簡潔。

5、 對於複雜函式或者函式體體量大的函式,最好不要用lambda函式,會增加**的閱讀難度,使**晦澀難懂。

6、 在非多次呼叫的函式的情況下,lambda表示式即用既得,提高效能

map()函式是python內建的高階函式,基本語法為

map(function,itera)
function是函式,itera是乙個迭代物件,就是將列表中的元素依次運用在函式function中。

map()函式的主要作用是並行,和zip()一致。下面舉個例子

>>> def ff(x):

... return x**2

...>>> list(map(ff,list(range(10))))

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce函式語法為

reduce (function ,iterable [,initializer ])
引數解釋:

function - 函式,有兩個引數

iterable - 可迭代物件

initializer - 可選,初始引數

reduce函式和map函式類似

sort()函式對列表和字典等進行排序。比如

>>> l = [4,5,2,6,1]

>>> l.sort()

>>> l

[1, 2, 4, 5, 6]

使用sort()方法對list排序會修改list本身,不會返回新list,通常此方法不如sorted()方便,並且sort()不能對字典排序。

>>> l = [4,5,2,6,1]

>>> result = sorted(l)

>>> result

[1, 2, 4, 5, 6]

>>> my_dict = 

>>> my_dict

>>> result = sorted(my_dict)

>>> result

['a', 'b', 'c']

sorted()函式對字典排序會預設對字典的key進行排序,並返回排序後的列表形式。

key引數

list.sort()和sorted()函式增加了key引數來指定乙個函式,此函式將在每個元素比較前被呼叫

key引數的值為乙個函式,此函式只有乙個引數且返回乙個值用來進行比較。這個技術是快速的因為key指定的函式將準確地對每個元素呼叫。

1、對元組排序

>>> my_tuble = [('hh','a',2),('xx','b',1),('aa','c',3)]

>>> my_tuble

[('hh', 'a', 2), ('xx', 'b', 1), ('aa', 'c', 3)]

>>> result = sorted(my_tuble,key = lambda x:x[2])

>>> result

[('xx', 'b', 1), ('hh', 'a', 2), ('aa', 'c', 3)]

上面**顯示x[2]限定是根據1,2,3排序的。

2、根據dict的value進行排序

>>> my_dict

>>> result = sorted(my_dict,key=lambda x:my_dict[x])

>>> result

['a', 'b', 'c']

這裡注意,如果不指定key,那麼會預設對key排序。

Python中lambda 函式詳解與運用

python中有一種靈活,便捷的且具有函式功能的表示式 lambda表示式!lambda表示式,又稱匿名函式,是現代各種程式語言爭相引入的一種語法,其功能堪比函式,設計卻比函式簡潔。lambda parameter list expression 根據其語法格式可以得到lambda 表示式的兩個要點...

python的匿名函式lambda解釋及用法

coding utf 8 author www.iplaypy.com 普通python函式 deffunc a,b,c return a b c print func 1,2,3 返回值為6 lambda匿名函式 f lambda a,b,c a b c print f 1,2,3 返回結果為6 ...

python匿名函式lambda原理及例項解析

如下 coding utf 8 author www.iplaypy.com www.cppcns.com 普通python函式 def func a,b,c return a b c print func 1,2,3 返回值為6 lambda匿名函式 f lambda a,b,c a b c pr...