functools模块:指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标。
from functools import reduce, wraps
1.reduce() 函数会对参数序列中元素进行累积。
函数会对可迭代对象进行操作:reduce中的函数会对可迭代对象中的第 1、2 个元素进行操作,得到的结果会与第三个数进行累计计算,直到与最后一个数进行计算,得到最后的结果.
语法:reduce(function, iterable[, initializer])
def add(x, y) : # 两数相加
return x + y
reduce(add, [1,2,3,4,5]) # 1+2+3+4+5=15
2.warps(): 保留原函数的属性(装饰器的修复技术)
装饰器能够在那个函数执行前或者执行后分别运行一些代码,使原函数的参数就会被修改.
def wrapper1(func):
@wraps(func)
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner
@wrapper1
def func1():
"""
func1注释的内容
:return:
"""
print('func1')
print(func1.__name__) # func1
print(func.__doc__) # 显示注释的内容
warps()相当于把每一个传进来的函数的名字进行还原/ 还能显示函数的本质
warps封装这update_wrapper函数, 函数中含有__name__、__module__、__doc__和 __dict__等.
3.偏函数(partial)
介绍一下偏函数:偏函数是2.5版本以后引进来的东西。属于函数式编程的一部分,使用偏函数可以通过有效地“冻结”那些预先确定的参数,来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将他们解冻,传递到最终的参数中,从而使用最终确定的所有参数去调用函数。
看了一个比较容易理解的例子:
def add(a,b):
return a+b;
add(3,5)
add(4,7)
以上两个是我们正常调用,那么如果我们知道一个已知的参数a= 100,我们如何利用偏函数呢?
import functools import partial as pto
puls = pto(add,100)
result = puls(9)
result的结果就是109。
在这里偏函数表达的意思就是,在函数add的调用时,我们已经知道了其中的一个参数,我们可以通过这个参数,重新绑定一个函数,就是pto(add,100),然后去调用即可。
对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。