2024-09-25 06:27:19 发布
网友
我正在使用Python编写一个函数decorator,它记录参数并在调用函数时返回函数的值
def logfunc(prefix)
输出应该是系统标准格式如下:
以及
"{prefix}: {function name} -> {return value}"
分别用于呼叫和返回。在
使用方法如下:
@logfunc("test") def f(arg) return arg
我不安静明白吗?有人能给我看看指针吗?在
我觉得这个问题很有意思,即使问得很糟糕:
如果Python文档中有一些没有参数的decorator示例,那么最简单的部分是,我花了一些时间才明白,接受参数的decorator实际上是一个接受参数并返回decorator的函数。一旦这一点弄清楚,答案几乎显而易见:
def logger(prefix): def decorate(f): def wrapper(*args, **kwargs): print(prefix, f.__name__, "args", args, "kwargs", kwargs) cr = f(*args, **kwargs) print(prefix, f.__name__, "result", cr) return cr return wrapper return decorate
用法:
import logging logger = logging.getLogger(__name__) def logging_decorator(fn): def func(*a, **kw): logger.info('%s(%s, %s)', fn, a, kw) return fn(*a, **kw) return func
如果要打印到stderr,可以使用import sys,然后使用sys.stderr.write('%s(%s, %s)' % (fn, a, kw))
stderr
import sys
sys.stderr.write('%s(%s, %s)' % (fn, a, kw))
我觉得这个问题很有意思,即使问得很糟糕:
如果Python文档中有一些没有参数的decorator示例,那么最简单的部分是,我花了一些时间才明白,接受参数的decorator实际上是一个接受参数并返回decorator的函数。一旦这一点弄清楚,答案几乎显而易见:
用法:
^{pr2}$如果要打印到
stderr
,可以使用import sys
,然后使用sys.stderr.write('%s(%s, %s)' % (fn, a, kw))
相关问题 更多 >
编程相关推荐