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()
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()
相关文章推荐
- 零基础学python-18.10 函数式编程工具:filter和reduce
- 零基础学python-18.10 函数式编程工具:filter和reduce
- Python 函数式编程 filter(),map() , reduce()......
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
- 零基础学python-18.10 函数式编程工具:filter和reduce
- Python进阶(三)-函数式编程之reduce()
- python 函数式编程:高阶函数,map/reduce
- 【语言工具】Python闭包,装饰器,生成器,偏函数,函数式编程,lamda,map,reduce,filter
- python 函数式编程 map、reduce用法
- 王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()
- Python 函数式编程之 filter()、map()和reduce()
- 王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()
- Python函数式编程学习:lambda, map, reduce, filter
- 2016.4.12Python迭代器,函数式编程,map/reduce高阶函数
- 【Python学习笔记】函数式编程:高阶函数map和reduce
- Python 函数式编程--高阶函数Map、Reduce、Filter、Sorted
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- Python函数式编程
- Python学习笔记——函数式编程
- python 函数式编程和高阶函数的概念