创建一个记录参数的函数装饰器

2024-09-25 06:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python编写一个函数decorator,它记录参数并在调用函数时返回函数的值

    def logfunc(prefix)

输出应该是系统标准格式如下:

^{pr2}$

以及

"{prefix}: {function name} -> {return value}"

分别用于呼叫和返回。在

使用方法如下:

@logfunc("test")
def f(arg)
    return arg

我不安静明白吗?有人能给我看看指针吗?在


Tags: 函数参数标准prefixreturn系统def格式
2条回答

我觉得这个问题很有意思,即使问得很糟糕:

如果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

用法:

^{pr2}$
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))

相关问题 更多 >