Python入门篇-functools
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.reduce方法
reduce方法,顾名思义就是减少
reduce(function,sequence[,initial])->value
可迭代对象不能位空;初始值没提供就在可迭代对象中取一个元素
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 7 from functools import reduce 8 9 10 print(reduce(lambda x,y:x*y,range(1,6))) #我们可以用来计算5的阶乘 11 print(reduce(lambda x,y:x*y,range(1,6),100)) #当然,我们也可以指定函数的起始值,这个起始值会直接赋值给x变量,如果没有指定则会使用序列的第一个数字来赋初值。 12 13 nums = [6,9,4,2,4,10,5,9,6,9] 14 print(nums) 15 print(sum(nums)) 16 print(reduce(lambda x,y:x+y,nums)) 17 18 19 20 #以上代码输出结果如下: 21 120 22 12000 23 [6, 9, 4, 2, 4, 10, 5, 9, 6, 9] 24 64 25 64
二.partial方法
1>.partial概述
偏函数,把函数部分的参数固定下来,相当于为部分的参数添加了一个固定的默认值,形成一个新的函数并返回
从partial生成的新函数,是对原函数的封装
2>.partial方法举例
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 import functools,inspect 9 10 def add(x, y, *args) -> int: 11 print("add args:{}".format(args)) 12 return x + y 13 14 newadd = functools.partial(add, y=5) 15 16 print(inspect.signature(add)) 17 print(newadd(7)) 18 print(newadd(10, y=20)) 19 print(newadd(y=10, x=6)) 20 print(inspect.signature(newadd)) 21 22 23 24 #以上代码执行结果如下: 25 (x, y, *args) -> int 26 add args:() 27 12 28 add args:() 29 30 30 add args:() 31 16 32 (x, *, y=5) -> int
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 8 import functools,inspect 9 10 def add(x, y, *args) -> int: 11 print("add args:{}".format(args)) 12 return x + y 13 14 newadd = functools.partial(add, 1,3,6,5) 15 print(newadd(7)) 16 print(newadd(7, 10)) 17 print(newadd()) 18 print(inspect.signature(add)) 19 print(inspect.signature(newadd)) 20 21 22 23 #以上代码执行结果如下: 24 add args:(6, 5, 7) 25 4 26 add args:(6, 5, 7, 10) 27 4 28 add args:(6, 5) 29 4 30 (x, y, *args) -> int 31 (*args) -> int