python functools.wraps functools.partial实例解析
一:python functools.wraps 实例
1. 未使用wraps的实例
#!/usr/bin/env python # coding:utf-8
def logged(func): def with_logging(*args, **kwargs): '''i am wraps's doc''' print func.__name__ + " was called" return func(*args, **kwargs) return with_logging @logged def f(x): """i am original doc""" return x + x * x print f.__name__ # 期望的是原本的名字f,结果换成了装饰器里的新函数的名字with_logging print f.__doc__ # 期望的是原本的注释,加了个装饰器成了新加装饰器里的注释了
2. 使用了wraps的实例
from functools import wraps def logged(func): @wraps(func) def with_logging(*args, **kwargs): '''i am wraps's doc''' print func.__name__ + " was called" return func(*args, **kwargs) return with_logging @logged def f(x): """i am original doc""" return x + x * x print f.__name__ # prints 'f' print f.__doc__ # prints 'i am original doc'
二:python functools.partial 实例解读
#!/usr/bin/env python # coding:utf-8 from functools import partial # 函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下, # 一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。 def add(a, b): return a+b add(4, 3) # 普通执行函数的方式 plus = partial(add, 10) # 预先输入一部分参数10, plus(2) # 再输入剩下的参数,超出少于都会报错; plus = partial(add, 10, 2) # 预先输入所有参数 plus() # 不能再有入参了 def add2(a, b, c=2): # 有默认值的函数 return a + b + c plus3 = partial(add2, 1) plus3(1, 2) partial(add2, 101)(1) def add3(*argv, **kwargs): # 不限制入参 return reduce(lambda x,y:x+y, argv) plus4 = partial(add3, 1, 2) plus4()
文章出处:http://www.cnblogs.com/aaron-agu/
只有毅力和决心才能使人真正具有价值!