小编Fre*_*son的帖子

保留装饰功能的签名

假设我编写了一个装饰器来做一些非常通用的东西.例如,它可能会将所有参数转换为特定类型,执行日志记录,实现memoization等.

这是一个例子:

def args_as_ints(f):
    def g(*args, **kwargs):
        args = [int(x) for x in args]
        kwargs = dict((k, int(v)) for k, v in kwargs.items())
        return f(*args, **kwargs)
    return g

@args_as_ints
def funny_function(x, y, z=3):
    """Computes x*y + 2*z"""
    return x*y + 2*z

>>> funny_function("3", 4.0, z="5")
22
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很顺利.然而,有一个问题.装饰函数不保留原始函数的文档:

>>> help(funny_function)
Help on function g in module __main__:

g(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

幸运的是,有一个解决方法:

def args_as_ints(f):
    def g(*args, **kwargs):
        args = [int(x) for x in args]
        kwargs = dict((k, int(v)) for k, v in kwargs.items()) …
Run Code Online (Sandbox Code Playgroud)

python decorator

102
推荐指数
5
解决办法
1万
查看次数

标签 统计

decorator ×1

python ×1