介绍:
functools 模块主要是为函数式编程设计的,用于增强函数功能。为函数服务的工具。
update_wrapper
用以更新包装函数
为什么要更新包装函数?–>保存被包装函数的属性
@functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS,
updated=WRAPPER_UPDATES)
类似copy_properties功能
wrapper 包装函数、被更新者,wrapped 被包装函数、数据源
assigned赋值:
元组WRAPPER_ASSIGNMENTS中是要被覆盖的属性
‘module’, ‘name’, ‘qualname’, ‘doc’, ‘annotations’
模块名、名称、限定名、文档、参数注解
源码中获取被包装函数各个属性的值set给包装函数
updated更新:
元组WRAPPER_UPDATES中是要被更新的属性,__dict__属性字典
包装函数更新成被包装函数的属性
增加一个__wrapped__属性,保留着wrapped函数:wrapper.wrapped=wrapped
使用方法:使用时直接调用
示例:
import functools
def logger(fn):
# @functools(fn) # wrapper = copy_properties(fn)(wrapper)
def wrapper(*args,**kwargs