Python 我们必须在装饰器的包装函数中使用函数值吗?
在一个视频中,我了解到我们不需要传递包装函数的参数(例如,在本例中显示),包装函数中将使用主函数的参数(Python 我们必须在装饰器的包装函数中使用函数值吗?,python,python-3.x,parameters,python-decorators,Python,Python 3.x,Parameters,Python Decorators,在一个视频中,我了解到我们不需要传递包装函数的参数(例如,在本例中显示),包装函数中将使用主函数的参数(div2)。 当我对上面的代码尝试同样的方法时,我得到了一个TypeError,该display()需要一个参数 我现在很困惑,在这种情况下,我的3个函数都应该具有如下参数: div2()->multi()函数本身作为参数 display()->显示函数值的参数multi() multi() 注意:当我让display()获取一个参数时,代码工作了问题不是display没有获取参数;这是因为你
div2
)。
当我对上面的代码尝试同样的方法时,我得到了一个TypeError
,该display()
需要一个参数
我现在很困惑,在这种情况下,我的3个函数都应该具有如下参数:
div2()
->multi()
函数本身作为参数
display()
->显示函数值的参数multi()
multi()
注意:当我让display()
获取一个参数时,代码工作了问题不是display
没有获取参数;这是因为你使用它就像它使用一样。记住,decorator语法只是语法糖
def div2(mult):
def display():
print(f"we are doing a check of multiples if div by 2")
if mult%2==0:
return f"{mult} is divisible"
return display
@div2
def multi(n):
return n*n*n
print(multi(5))
div2
的结果不需要保留div2
参数的签名,不过在使用该结果之前,您必须知道它是否保留签名
div2
的参数是一个函数,不能除以2。你的装饰师应该是
def multi(n):
return n*n*n
multi = div2(multi)
这里multi接受一个参数,名为n
def div2(f):
def display(x):
print(f"We are doing a check of multiples if div by 2")
if f(x) % 2 == 0:
return f"{x} is divisible"
return display
@div2
def multi(n):
return n*n*n
prin(multi(5))
使用decorator语法实际上与执行以下操作相同:
def multi(n):
return n*n*n
因此,如果您希望能够将参数传递给包装器display
,则必须定义它以获取参数。感谢您的澄清
multi = div2(multi)