Python 如何向装饰程序获取参数?

Python 如何向装饰程序获取参数?,python,decorator,python-decorators,Python,Decorator,Python Decorators,在包装函数的情况下,有没有办法将参数传递给装饰器?比如说, @job('default') def update_index(): call_command("update_index", remove=True) func = update_index args = ?? # How to use 'func' to get the string 'default' here? 一般来说,你不能 job('default')首先执行;返回的内容用作装饰器;从本质上讲,pytho

在包装函数的情况下,有没有办法将参数传递给装饰器?比如说,

@job('default')
def update_index():
    call_command("update_index", remove=True) 


func = update_index
args = ?? # How to use 'func' to get the string 'default' here?

一般来说,你不能

job('default')
首先执行;返回的内容用作装饰器;从本质上讲,python做到了:

def update_index():
    call_command("update_index", remove=True) 
update_index = job('default')(update_index)
因此,
job('default')
可以返回任何内容。它可以返回一个只返回其参数的函数:

def job(value):
    return lambda f: f
这不会对
值执行任何操作,返回的'decorator'是一个no-op,它返回原始函数不变


对于特定的装饰者来说,很可能是他们留下了一个闭包或者我们可以反省的额外属性。但这实际上取决于具体的装饰师。

一般来说,你不能

job('default')
首先执行;返回的内容用作装饰器;从本质上讲,python做到了:

def update_index():
    call_command("update_index", remove=True) 
update_index = job('default')(update_index)
因此,
job('default')
可以返回任何内容。它可以返回一个只返回其参数的函数:

def job(value):
    return lambda f: f
这不会对
值执行任何操作,返回的'decorator'是一个no-op,它返回原始函数不变


对于特定的装饰者来说,很可能是他们留下了一个闭包或者我们可以反省的额外属性。但这实际上取决于具体的装饰者。

这在这里似乎不适用。他希望得到包装函数的参数,而不是装饰器的参数。这在这里似乎不适用。他希望得到包装函数的参数,而不是装饰器的参数。我不知道
job('default')
的返回值在这里是如何起作用的……我不想执行装饰器
update\u index()
@jess:装饰器语法就是这样工作的。
@
后面的位是一个表达式。对其进行了评估。结果是decorator是可调用的,然后在传入要修饰的函数时调用它,返回值是用于命名函数的值。@jess:
update\u index()
。但装饰师是,这就是应用装饰师的意思。啊,是的,这是有道理的。谢谢我不明白
job('default')
的返回值在这里是如何起作用的……我不想执行decorator
update\u index()
@jess:这就是decorator语法的工作方式。
@
后面的位是一个表达式。对其进行了评估。结果是decorator是可调用的,然后在传入要修饰的函数时调用它,返回值是用于命名函数的值。@jess:
update\u index()
。但装饰师是,这就是应用装饰师的意思。啊,是的,这是有道理的。谢谢