世界的过客

每个人获得的东西都恰好是他值得获得的东西

Functools

functools module

functools 模块包含了非常多很有用的函数,甚至可以说是比较常用的。这些函数主要用于创建高阶函数、函数式编程和装饰器的函数和装饰器。

partial

   def spam(a,b,c,d):
       print(a,b,c,d)
   from functools import partial
   s1 = partial(spam,1)
   s1(2,3,4) # 1,2,3,4

在类定义中使用partial, 那么这个函数的行为类似于静态方法而不是实例方法。

reduce(function, items [,initial])

   def add(a,b):
       return a+b
   from functools import reduce
   reduce(add, [i for i in range(1,11)]) # 55

从可迭代对象中取前两个值,交给作为第一个参数传入的处理函数处理(类似map的第一个参数),完了再将函数的返回值与 可迭代对象中的下一个值作为处理函数的值。从这可以知道这个处理函数必须要能接受两个参数。

update_warpper

我在之前的python-note中记录过一点,简单来说就是为了能够保有原始函数的包括docstring在内的一些属性而提供的。然而每次调用update_warpper不方便, 于是就有了下一小节的warps。

warps

from functools import wraps
def corator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print('calling decorated function ..')
    return wrapper

@corator
def test():
    """
    docstring
    """
    print('called test function')
print(test.__name__,test.__doc__) # test docstring

与update_warpper功能类似,但身为装饰器更容易使用。