Fork me on GitHub

高阶函数reduce

# ### reduce
'''
reduce(func,iterable)
功能:计算	
	先把iterable中的前两个数据拿出来,扔到func当中,
	进行计算,把计算的结果在和iterable当中的第三个数据扔到func中
	进行计算, 依次类推... ... 
	直到iterable中的数据全都拿出来为止.
参数:
	func: 内置函数 或者 自定义函数
	iterable:可迭代性数据(常用:容器类型数据,range对象,迭代器)
返回值:
	计算最终的结果
'''

# [5,4,8,8] => 5488
# 方法一
lst = [5,4,8,8]
strvar = ''
for i in lst:
	strvar += str(i)
print(strvar,type(strvar))
res = int(strvar)
print(res,type(res))

# 方法二
'''
5*10 + 4 = 54
54*10 + 8 = 548
548*10 + 8 = 5488
'''
lst = [5,4,8,8,1,2,3,4]
it = iter(lst)
num1 = next(it) # 5
num2 = next(it) # 4
total = num1 * 10 + num2
print(total)
for i in it:
	total = total * 10 + i
print(total,type(total))

#  使用reduce实现
# from ..import 从哪个模块 ... 导入 ...
# functools是一个模块(文件)
from functools import reduce
lst = [5,4,8,8]
def func(x,y):
	return x*10+y

res = reduce(func,lst)
print(res)
'''
首先把5,4拿到func函数当中,进行运算得到54
然后把54和lst当中的第三个元素8拿到func当中进行运算得到548
然后把548和list当中的第四个元素8拿到func当中进行运算得到5488
到此,所有数据运算完毕,返回5488
'''

# "987" => 987 (不让使用int类型强转)
def func(x,y):
	return x*10+y
# ["9","8","7"]
res = reduce(func,"987")
print(res)
# '9999999999899999999998999999999989999999999899999999998999999999987' 
# "987" => [9,8,7]
def func2(n):
	dic = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
	return dic[n]

it = map(func2,"987")
# print(list(it))
res = reduce(func,it)
print(res,type(res))

  

posted @ 2019-05-22 16:06  MR_黄Python之路  阅读(445)  评论(0编辑  收藏  举报