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')
的返回值在这里是如何起作用的……我不想执行decoratorupdate\u index()
@jess:这就是decorator语法的工作方式。@
后面的位是一个表达式。对其进行了评估。结果是decorator是可调用的,然后在传入要修饰的函数时调用它,返回值是用于命名函数的值。@jess:update\u index()
。但装饰师是,这就是应用装饰师的意思。啊,是的,这是有道理的。谢谢