标签:update pre *args 使用 ace div 覆盖 nts assigned
import sys debug_log = sys.stderr def trace(func): if debug_log: def callf(*args, **kwargs): """A wrapper function.""" debug_log.write(‘Calling function: {}\n‘.format(func.__name__)) res = func(*args, **kwargs) debug_log.write(‘Return value: {}\n‘.format(res)) return res return callf else: return func @trace def square(x): """Calculate the square of the given number.""" return x * x
def trace(func): if debug_log: @functools.wraps(func) def callf(*args, **kwargs): """A wrapper function.""" debug_log.write(‘Calling function: {}\n‘.format(func.__name__)) res = func(*args, **kwargs) debug_log.write(‘Return value: {}\n‘.format(res)) return res return callf else: return func
此时 用trace 装饰的 square 的属性就不会变化了,可以help(square) 看看
def trace(func): if debug_log: def _callf(*args, **kwargs): """A wrapper function.""" debug_log.write(‘Calling function: {}\n‘.format(func.__name__)) res = func(*args, **kwargs) debug_log.write(‘Return value: {}\n‘.format(res)) return res callf = functools.update_wrapper(_callf, wrapped = func,assigned = functools.WRAPPER_ASSIGNMENTS,updated = functools.WRAPPER_UPDATES) return callf else: return func
update_wrapper做的工作很简单,就是用参数wrapped表示的函数对象(例如:square)的一些属性(如:__name__、 __doc__)覆盖参数wrapper表示的函数对象(例如:callf,这里callf只是简单地调用square函数,因此可以说callf是 square的一个wrapper function)的这些相应属性。
标签:update pre *args 使用 ace div 覆盖 nts assigned
原文地址:http://www.cnblogs.com/suyuan1573/p/6031960.html