装饰器中的Python命名约定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器中的Python命名约定相关的知识,希望对你有一定的参考价值。

Python装饰器内部是否有任何“可接受的”命名约定?

style guide没有提到它,并且this awesome entry about decorators在使用“包装”的变体为返回的最终函数时非常一致,但是在创建带参数的装饰器时使用的名称呢?

def decorator_name(whatevs):
    def inner(function):
        def wrapped(*args, **kwargs):
            # sweet decorator goodness
        return wrapped
    return inner

具体来说,在上面的例子中,innerfunctionwrapped的约定是什么?

答案

这些名称没有标准化的约定(例如PEP)。如果你检查python stdlib,你会发现这些函数有很多不同的名字。

然而,decorator是装饰函数inner的一个相当常见的名称。 调用你的wrapped函数wrapper并用functools.wraps(f)装饰它也很常见,f是包装函数(func也是它的常用名称)。

def decorator_name(whatevs):
    def decorator(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            pass # sweet decorator goodness
        return wrapper
    return decorator
另一答案

根据定义,Python中的装饰器可以是函数或类,因此实现的类型(类或函数)是决定使用哪种命名约定的因素。一个常见的错误是使用关键字装饰器为函数的名称添加前缀。有关装饰器的更多信息,请参阅link

以上是关于装饰器中的Python命名约定的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中访问装饰器中的类属性?

装饰器中的 Python Access 函数变量

Python - 在装饰器中获取原始函数参数

如何将装饰器中的变量传递给装饰函数中的函数参数?

python使用上下文对代码片段进行计时,非装饰器

怎么在Python装饰器中自定义功能呢?用这种方法让你“为所欲为”