在python装饰器中包装操作

在python装饰器中包装操作,python,Python,我已经编写了一个应用程序,它允许用户创建与逻辑运算符绑定的对象,然后这些对象可以用作装饰器。例如: edit_need = owner_need | admin_need @edit_need def edit(): # Raise an error if the need is not met. 最好将其缩短为: @(owner_need | admin_need) def edit(): # ... 当然,这会引起语法错误。同样的事情也可以通过额外的装饰来完成,例如:

我已经编写了一个应用程序,它允许用户创建与逻辑运算符绑定的对象,然后这些对象可以用作装饰器。例如:

edit_need = owner_need | admin_need

@edit_need
def edit():
    # Raise an error if the need is not met.
最好将其缩短为:

@(owner_need | admin_need)
def edit():
    # ...
当然,这会引起语法错误。同样的事情也可以通过额外的装饰来完成,例如:

def decorator(dec):
    @wraps(dec)
    def adapt(f):
        return dec(f)
    return adapt

@decorator(owner_need | admin_need)
def edit():
    # ...

但是,这感觉像是有一个python内置的东西。不过,我还没能随便在谷歌上找到它。有什么想法吗?

你在这里找什么?正如您所发现的,(例如,
foo
foo.bar
),而不是表达式。返回decorator的函数是有效语法,但您已经发现。你是否在寻找其他方法的建议?这似乎离主题很近:-)如果您阅读了问题的最后一部分,我要的是一个python内置程序,它与
decorator()或类似的功能相同。因为这是一个关于语言本身的基本工具的问题,而不是语言中的方法论问题,所以我认为这将是一个主题。啊,我明白了。嗯,我不认为有任何内置的这个。。。有太多的变体,而且(正如您所演示的),它是一个非常直接的5行函数,所以我认为它可能不值得。恕我直言,Python的内置函数都很小,公平地说,您所说的是一个2行:
def decorator(dec):return dec
(或一行lambda)。基本上,您只需要标识函数。我认为identity函数不包括在标准库中,因为python不想成为函数式编程语言。我得到的印象是,Guido对其有限的支持感到遗憾(
filter
map
lambda
,等等)。无论如何,如果你对此有强烈的感觉,请随时在:-)上发布想法