前幾天看到了一行求1000的階乘的python**:
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
'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
def
make_repeater
(n):
return lambda
s: s*n
twice = make_repeater(2
)
print
twice(
'word'
)
print
twice(
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...