functools模块:管理函数的工具
partial对象:包装原函数,提供默认值
import functools # 原函数 def myfunc(a, b=2): """Docstring for myfunc().""" print(‘ called myfunc with:‘, a, b) return # 输出函数 def show_details(name, f, is_partial=False): print(name) print(f) if not is_partial: print(f.__name__) if is_partial: print(f.func) print(f.args) print(f.keywords) return # show_details(‘myfunc‘, myfunc) # myfunc(‘a‘, 3) p1 = functools.partial(myfunc, b=4) # 包装后的函数 show_details(‘partial with named‘, p1, True) p1(‘passing a‘) # 调用包装后的函数 p1(‘override b‘, b=5)
复制原函数的属性到partial对象
functools.update_wrapper(p1, myfunc) # 注释掉这一行,运行报错 print(p1.__name__) print(p1.__doc__)
包装实例对象的函数
class MyClass(object): def method(self, a, b=2): """Docstring for method().""" print(‘ called method with:‘, a, b) return o = MyClass() p1 = functools.partial(o.method, b=4) show_details(‘partial with named‘, p1, True) functools.update_wrapper(p1, o.method) print(p1.__name__) print(p1.__doc__)
@functools.wraps 装饰器
def simple_decorator(f): @functools.wraps(f) def decorated(a=‘decorated‘, b=1): print(a, b) f(a, b=b) return return decorated wrapped = simple_decorator(myfunc) print(wrapped.__name__) print(wrapped.__doc__)
@functools.total_ordering
为类添加富比较方法,类必须提供__eq__和另一个富比较方法
@functools.cmp_to_key(cmp_obj)
时间: 2024-10-17 13:20:45