前幾天看到了一行求1000的階乘的python**
python**
reduce(
lambda
x,y:x*y, range(
1,
1001
))
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函式的定義方式:
>>>可以看到,兩個函式得到的結果一樣,而對於實現簡單功能的函式來說,使用lambda函式來定義更加精簡靈活,還可以直接把函式賦值給乙個變數,用變數名來表示函式名。deff(x,y):
...
return
x*y
...
>>> f(2,
3)
>>> g =
lambda
x,y: x*y
>>> g(2,
3)
其實lambda函式在很多時候都是不需要賦值給乙個變數的(如前文中求階乘的過程)。
使用lambda函式還有一些注意事項:
lambda 函式可以接收任意多個引數 (包括可選引數) 並且返回單個表示式的值。
lambda 函式不能包含命令,包含的表示式不能超過乙個。
下面簡單演示一下如何使用lambda函式實現自定義排序。
class上面的**定義了乙個people類,並通過lambda函式,實現了對包含people類物件的列表按照people的年齡,進行公升序和降序排列。執行結果如下: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'
)]
'befor sort:'
forp
inlist:
p.tostring()
list.sort(
lambda
p1,p2:cmp(p1.age,p2.age))
'\nafter ascending sort:'
forp
inlist:
p.tostring()
list.sort(
lambda
p1,p2:-cmp(p1.age,p2.age))
'\nafter descending sort:'
forp
inlist:
p.tostring()
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...