Too*_*one -3 python decorator python-3.x python-decorators
假设以下内容:
@two
def zero:
pass
Run Code Online (Sandbox Code Playgroud)
被实现为:
zero = __@__(two, zero)
Run Code Online (Sandbox Code Playgroud)
外表的__@__模样会是什么样?我以前认为是以下情况:
def __@__(two, zero):
return two(x)
Run Code Online (Sandbox Code Playgroud)
也许这是正确的,但即将推出更多细节。
考虑下面的示例。
def three(y):
def two(zero):
print(y)
def one(*args, **kwargs):
print(y)
return zero(*args, **kwargs)
return one
return two
###################################
@three(5)
def zero(x):
print(x)
Run Code Online (Sandbox Code Playgroud)
在这里,看起来下面的代码####[...]####类似于:
def __@__(two, zero):
return two(zero)
two_inst = three(5)
zero = __@__(two_inst, zero)
Run Code Online (Sandbox Code Playgroud)
__@__如果有a four,a five或a ,使用的伪代码会是什么样six?
其次,关于多个装饰器,例如:
@twoA
@twoB
@twoC
def zero:
pass
Run Code Online (Sandbox Code Playgroud)
@在Python中没有“装饰器运算符” 这样的东西。
的@<name>前面的def在Python为函数/方法工厂一个语法糖:
@foo
def bar(x):
...
Run Code Online (Sandbox Code Playgroud)
等效于:
bar = foo(bar)
Run Code Online (Sandbox Code Playgroud)
请注意,函数bar本身而不是对其的调用(例如not bar())被传递给foo。
许多Python教程都提供了有关此内容的更多信息,例如here。