Python的lambda函式與排序

2021-05-21 21:34:11 字數 3416 閱讀 6388

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

print

reduce

(lambdax,

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函式。

1>>>

deff(x

,y):

2...

returnx*

y3...4

>>>f(

2,3)56

6>>>g=

lambda

x,y:x*

y7>>>g(

2,3)86

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

其實lambda函式在很多時候都是不需要賦值給乙個變數的(如前文中求階乘的過程)。
使用lambda函式還有一些注意事項:

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

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

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

class

people:02

age=003

gender

='male'

0405

def__init__

(self

,age

,gender

):06

self

.age

=age

07self

.gender

=gender

08def

tostring

(self

):09

return

'age:'

+str

(self

.age)+

'/tgender:'

+self

.gender

1011

list=[

people(21

,'male'

),people(20

,'famale'

),people(34

,'male'

),people(19

,'famale'

)]12

print

'befor sort:'

13forpin

list:14

printp.

tostring

()15

16list

.sort

(lambdap1,

p2:cmp(p1.

age,p2.

age))

17print'/n

after ascending sort:'

18forpin

list:19

printp.

tostring

()20

21list

.sort

(lambdap1,

p2:-cmp(p1

.age,p2

.age

))22

print'/n

after descending sort:'

23forpin

list:24

printp.

tostring()

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

befor sort:

age:21    gender:male

age:20    gender:famale

age:34    gender:male

age:19    gender:famale

after ascending sort:

age:19    gender:famale

age:20    gender:famale

age:21    gender:male

age:34    gender:male

after descending sort:

age:34    gender:male

age:21    gender:male

age:20    gender:famale

age:19    gender:famale

lambda語句被用來建立新的函式物件,並且在執行時返回它們。

例15.2 使用lambda形式

#!/usr/bin/python

# filename: lambda.py

defmake_repeater(n):

return lambdas: s*n

twice = make_repeater(2)

printtwice('word')

printtwice(5)

(源 檔案:code/lambda.py)

$ python lambda.py

wordword

10

這裡,我們使用了make_repeater函 數在執行時建立新的函式物件,並且返回它。lambda語句用來建立函式物件。本質上,lambda需 要乙個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。注意,即便是print語句也不能用在 lambda形式中,只能使用表示式。

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...