哈嘍大家好,今天說一下reduce函式的使用方法,以及與for回圈的對比,
reduce函式原本在python2中也是個內置函式,不過在python3中被移到functools模塊中,
reduce函式先從串列(或序列)中取出2個元素執行指定函式,并將輸出結果與第3個元素傳入函式,輸出結果再與第4個元素傳入函式,…,以此類推,直到串列每個元素都取完,
# 很多小伙伴在學習的程序中,因為沒有好的資料和教程,也不清楚學習方向,以及遇到問題得不到及時的解決,導致自己喪失了學習興趣與動力,不僅白白浪費時間精力,而且下次在想學東西,也沒有興趣了, # 所以小編創了一個學習交流q君羊 279199867,準備了海量的學習資料,直接找管理領取就可以了,同數千志同道合的人一同學習交流,
reduce用法
對串列元素求和,如果不用reduce,我們一般常用的方法是for回圈:
def sum_func(arr): if len(arr) <= 0: return 0 else: out = arr[0] for v in arr[1:]: out += v return out a = [1, 2, 3, 4, 5] print(sum_func(a))
可以看到,代碼量比較多,不夠優雅,如果使用reduce,那么代碼將非常簡潔:
from functools import reduce a = [1, 2, 3, 4, 5] def add(x, y): return x + y print(reduce(add, a))
輸出結果為:
15
reduce與for回圈性能對比
與內置函式map和filter不一樣的是,在性能方面,reduce相比較for回圈來說沒有優勢,甚至在實際測驗中
reduce比for回圈更慢, from functools import reduce import time def test_for(arr): if len(arr) <= 0: return 0 out = arr[0] for i in arr[1:]: out += i return out def test_reduce(arr): out = reduce(lambda x, y: x + y, arr) return out a = [i for i in range(100000)] t1 = time.perf_counter() test_for(a) t2 = time.perf_counter() test_reduce(a) t3 = time.perf_counter() print('for回圈耗時:', (t2 - t1)) print('reduce耗時:', (t3 - t2))
輸出結果如下:
for回圈耗時: 0.009323899999999996
reduce耗時: 0.018477400000000005
因此,如果對性能要求苛刻,建議不用reduce, 如果希望代碼更優雅而不在意耗時,可以用reduce,
好啦,今天的分享就到這,如果對你有幫助的話可以收藏起來喲!
給大家推薦一套Python爬蟲教程,涵蓋了大部分的常見案例,非常好用!
Python 爬蟲實戰一百例
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502300.html
標籤:Python
上一篇:Python實作人臉識別
