【发布时间】:2017-12-11 22:14:01
【问题描述】:
包括/不包括 return 声明中用于装饰器(和任何嵌套函数)的内部函数的括号有什么区别?是否仅当函数返回超过 1 个变量时才需要括号?
在下面的示例中,我知道除非我使用return inner(),否则这将不起作用,但我看到其他示例在return 上不使用(),它们工作正常。
原因背后的术语会很好,因此可以帮助我完全理解。谢谢。
def stars(func):
def inner():
print("*" * 50)
func()
print("*" * 50)
return inner()
@stars
def func():
print('Decorate this message.')
它最初打印我的信息,装饰。但是如果我再次调用 func(),它不会打印任何东西。
另一个工作示例,但 return inner 在这种情况下工作正常,只要我设置我的函数以支持可调用变量,在我的示例中为 msg:
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
@star
def func(msg):
print(msg)
func("Another message to be decorated")
我可以每次调用 func('my new message') 来打印我的消息,装饰。当我不使用可调用函数时,为什么与上一个示例相比?
【问题讨论】:
-
用另一个例子更新了我的问题,没有括号的工作“返回内部”。希望这有助于更有意义。
-
重要的一点是
def fun:...之前的装饰器@deco是fun = deco(fun)的语义糖,出现在def的末尾之后。
标签: python python-3.x return python-decorators