一、匿名函數(shù)(lambda):
有些地方需要用到一些簡單的函數(shù),而且用到的次數(shù)不太多,這個時候可以把函數(shù)改寫成匿名函數(shù),不必專門去定義一個新的函數(shù)。python中,lambda是一個表達式,并不是一個語句,而且lambda的主體是只有一行的簡單表達式,并不能擴展成一個多行的代碼塊。
python的一些匿名函數(shù)用法例子:
# 匿名函數(shù)的格式:
lambda argument1, argument2, ... argumentN : expression
# 示例一:
square = lambda x: x**2
square = square(3)
# 示例二:
[(lambda x: x*x)(x) for x in range(10)]
# 示例三:
l = [(1,20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1])
# 示例四:
squared = map(lambda x: x**2, [1,2,3,4,5])
# map(function, iterable) 對iterable的每一個元素進行function運算。
# 示例五:
d = {'mike': 10, 'lucy': 2, 'ben': 30}
dict(sorted(d.items(), key = lambda x: x[1], reverse=True))
?
二、函數(shù)式編程
python提供的一些函數(shù)式編程特性,主要是通過map(),filter()和reduce()這幾個函數(shù),結合匿名函數(shù)lambda一起使用。
通常,使用這些函數(shù)的速度會更快,因為它們直接由C語言編寫,運行時不需要通過python解釋器間接調(diào)用。
下面是一些示例用法:
# map(function, iterable)的用法: 對每個iterable的元素運用function函數(shù),組成一個新的集合
l = [1,2,3,4,5]
new_list = map(lambda x: x * 2, l)
# 測試map的速度
python3 -mtimeit -s'xs=range(1000000)' 'map(lambda x: x*2, xs)'
python3 -mtimeit -s'xs=range(1000000)' '[x * 2 for x in xs]'
python3 -mtimeit -s'xs=range(1000000)' 'l = []' 'for i in xs: l.append(i*2)'
# filter(function, iterable)的用法: 對每個iterable的元素運用function函數(shù),將返回True的元素組合成一個新的集合
l = [1,2,3,4,5]
new_list = filter(lambda x: x % 2 == 0, l)
# reduce(function, iterable)的用法: 對一個集合進行一些累積操作,function有兩個參數(shù),表示對iterable里的每個元素以及上一次調(diào)用后的結果調(diào)用function進行運算,最后返回一個單獨的數(shù)值
l = [1,2,3,4,5]
product = reduce(lambda x, y: x * y, l)
# 表示運算: product = 1 * 2 * 3 * 4 * 5
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
