我正试图攻克python的最后一个基本特性:decorators。我没有像处理列表比较那样摸索它,而且我不理解decorator声明中的内部函数是如何工作的。在
这是我的意思的一个例子。给出这个chunk-o-code:
def outer(func):
def inner(*args, **kwargs):
print('Hi my name is ')
return func(*args, **kwargs)
return inner
@outer
def decorated(name):
print(name)
decorated('Bob')
我知道这会打印出来
^{pr2}$但我不明白的是inner
如何从decorated()
获得任何{
我的理解是
@outer
def decorated(name):
print(name)
decorated("Bob")
相当于outer(decorated("Bob"))
。如果是这样,inner()
如何访问name
参数?撇开语法问题不谈,我希望inner的声明看起来像def inner(func.args, func.kwargs):
这是怎么回事?我误解了什么?在
那是错误的。它相当于
outter(decorated)("Bob")
。decorated
替换为outer(decorated)
(即inner
)的返回值。当您调用decorated
时,实际上是在调用inner
。在您可以交互检查:
相关问题 更多 >
编程相关推荐