直接進入主題
常見的lambda呼叫方式為
簡單解釋一些,第一行可以理解為lambda宣告,x,y是傳入的引數,x+y則是函式引數,最後會返回函式的值。lambda作為乙個表示式,定義了乙個匿名函式,上例的**x,y為入口引數,x+y為函式體。python允許用lambda關鍵字創造匿名函式。匿名是不需要以標準的方式來宣告,比如說使用 def 語句。>>> a = lambda x,y:x+y
>>> a(2,3)
作為函式,它們也能有引數。乙個完整的 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()一致。下面舉個例子
reduce函式語法為>>> def ff(x):
... return x**2
...>>> list(map(ff,list(range(10))))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce (function ,iterable [,initializer ])
引數解釋:
function - 函式,有兩個引數
iterable - 可迭代物件
initializer - 可選,初始引數
reduce函式和map函式類似
sort()函式對列表和字典等進行排序。比如
使用sort()方法對list排序會修改list本身,不會返回新list,通常此方法不如sorted()方便,並且sort()不能對字典排序。>>> l = [4,5,2,6,1]
>>> l.sort()
>>> l
[1, 2, 4, 5, 6]
>>> l = [4,5,2,6,1]
>>> result = sorted(l)
>>> result
[1, 2, 4, 5, 6]
sorted()函式對字典排序會預設對字典的key進行排序,並返回排序後的列表形式。>>> my_dict =
>>> my_dict
>>> result = sorted(my_dict)
>>> result
['a', 'b', 'c']
key引數
list.sort()和sorted()函式增加了key引數來指定乙個函式,此函式將在每個元素比較前被呼叫
key引數的值為乙個函式,此函式只有乙個引數且返回乙個值用來進行比較。這個技術是快速的因為key指定的函式將準確地對每個元素呼叫。
1、對元組排序
上面**顯示x[2]限定是根據1,2,3排序的。>>> 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)]
2、根據dict的value進行排序
這裡注意,如果不指定key,那麼會預設對key排序。>>> my_dict
>>> result = sorted(my_dict,key=lambda x:my_dict[x])
>>> result
['a', 'b', 'c']
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...