functools模块知识点梳理。。。。

 

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),然后去调用即可。

对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。

 

posted @ 2019-10-30 17:32  AnthonyWang  阅读(108)  评论(0)    收藏  举报