Python的Lambda函式與排序

2021-07-04 00:18:27 字數 2759 閱讀 6532

前幾天看到了一行求1000的階乘的python**

python**

print

reduce(

lambda

x,y:x*y,   range(

1,   

1001

))   

一下子被python**的精簡與緊湊所折服,故對**進行了簡單的分析。

reduce與range都是python的內建函式。

range(1,1001)表示生成1到1000的連續整數列表(list)。

reduce(functiona,iterableb),functiona為需要兩個變數的函式,並返回乙個值。iterableb為可迭代變數,如list等。reduce函式將b中的元素從左到右依次傳入函式a中,再用函式a返回的結果替代傳入的引數,反覆執行,則可將b reduce成乙個單值。在此,是將1到1000的連續整數列表傳入lambda函式並用兩個數的積替換列表中的數,實際的計算過程為:(...((1×2)×3)×4)×...×1000),最後的結果即1000的階乘。

下面來介紹一下lambda函式。

lambda函式是一種快速定義單行的最小函式,是從 lisp 借用來的,可以用在任何需要函式的地方。下面的例子比較了傳統的函式與lambda函式的定義方式:

>>> 

deff(x,y):   

...     

return

x*y   

...       

>>> f(2,

3)   

>>> g = 

lambda

x,y: x*y   

>>> g(2,

3)  

可以看到,兩個函式得到的結果一樣,而對於實現簡單功能的函式來說,使用lambda函式來定義更加精簡靈活,還可以直接把函式賦值給乙個變數,用變數名來表示函式名。

其實lambda函式在很多時候都是不需要賦值給乙個變數的(如前文中求階乘的過程)。

使用lambda函式還有一些注意事項:

lambda 函式可以接收任意多個引數 (包括可選引數) 並且返回單個表示式的值。

lambda 函式不能包含命令,包含的表示式不能超過乙個。

下面簡單演示一下如何使用lambda函式實現自定義排序。

class

people:  

age=

0gender=

'male'

def__init__(

self

, age, gender):    

self

.age = age    

self

.gender = gender  

deftostring(

self

):  

return

'age:'

+str(

self

.age)+

'\tgender:'

+self

.gender  

list=[people(21,

'male'

),people(20,

'famale'

),people(34,

'male'

),people(19,

'famale'

)]  

print

'befor sort:'

forp 

inlist:  

print

p.tostring()  

list.sort(

lambda

p1,p2:cmp(p1.age,p2.age))  

print

'\nafter ascending sort:'

forp 

inlist:  

print

p.tostring()  

list.sort(

lambda

p1,p2:-cmp(p1.age,p2.age))  

print

'\nafter descending sort:'

forp 

inlist:  

print

p.tostring() 

上面的**定義了乙個people類,並通過lambda函式,實現了對包含people類物件的列表按照people的年齡,進行公升序和降序排列。執行結果如下:

befor sort:   

age:

21gender:male   

age:

20gender:famale   

age:

34gender:male   

age:

19gender:famale   

after ascending sort:   

age:

19gender:famale   

age:

20gender:famale   

age:

21gender:male   

age:

34gender:male   

after descending sort:   

age:

34gender:male   

age:

21gender:male   

age:

20gender:famale   

age:

19gender:famale  

python中的lambda函式

lambda函式也叫匿名函式,即,函式沒有具體的名稱。先來看乙個最簡單例子 deff x returnx 2printf 4 python中使用lambda的話,寫成這樣 g lambdax x 2printg 4 lambda表示式在很多程式語言都有對應的實現。比如c varg x x 2cons...

python中的lambda函式

今天學習python裡面的高階函式map f list 的時候看見這樣一行 print map lambda x x 3,range 6 我已經知道 map函式的首個引數是乙個函式,後面的乙個或者多個list or tuple作為第乙個引數 也就是那個函式 的引數,以map的方式遍歷執行,並返回乙個...

Python的lambda匿名函式

lambda函式也叫匿名函式,即,函式沒有具體的名稱。先來看乙個最簡單例子 def f x return x 2 print f 4 python中使用lambda的話,寫成這樣 g lambda x x 2 print g 4 lambda表示式在很多程式語言都有對應的實現。比如c var g x...