您的位置:首页 > 编程语言 > Python开发

Python函数式编程之Reduce

2017-09-14 08:33 281 查看
注意:Python3.0 以后引用Reduce需要from functools import Reduce,否则会报错:NameError: name 'reduce' is not defined

reduce(function,sequence,string_value):对sequence中的item进行迭代调用function,如果有string_value,还可以作为初始值调用

下面这个例子中分别在testCase_01和02用了普通的函数和函数式编程两种方法进行了对比:

from functools import reduce
import unittest
class Solution(object):
def __init__(self,list_num):
self.list_num = list_num
def CalcAverage(self):
positive_num_avg = 0
positive_num_cnt = 0
positive_num_sum = 0
for i in self.list_num:
if i > 0:
positive_num_sum+=i
positive_num_cnt+=1
if positive_num_cnt > 0:
positive_num_avg = positive_num_sum/positive_num_cnt
return positive_num_avg

class TestSolution(unittest.TestCase):
def setUp(self):
pass

def tearDown(self):
pass

def testCase_01(self):
list_num = [2,-5,9,7,-2,5,3,1,0,-3,8]
Test = Solution(list_num)
res_tar = 5
self.assertEqual(res_tar,Test.CalcAverage())
def testCase_02(self):
list_num = [2,-5,9,7,-2,5,3,1,0,-3,8]
res_tar = 5
tmp_sum = reduce(lambda x,y:x+y,filter(lambda x : x>0,list_num))
tmp_cnt = len(list(filter(lambda x :x >0 , list_num)))
print('tmp_sum = ',tmp_sum,'tmp_cnt = ',tmp_cnt)
self.assertEqual(tmp_sum/tmp_cnt,res_tar)
if __name__ == '__main__':
unittest.main()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: