【发布时间】:2019-07-29 22:00:25
【问题描述】:
我正在尝试征服自开始使用以来我一直避免使用的最后一个基本 Python 功能:装饰器。我没有像使用 list-comps 那样对它进行摸索,而且我不明白装饰器声明中的内部函数是如何工作的。
这是我的意思的一个例子。鉴于此块代码:
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')
我知道这会打印出来
Hi my name is
Bob
但我不明白的是inner如何从decorated()获得任何*args或**kwargs
我的理解是这样的
@outer
def decorated(name):
print(name)
decorated("Bob")
相当于outer(decorated("Bob"))。如果是这种情况,inner() 将如何访问name 参数?除了语法问题,我希望 inner 的声明看起来像 def inner(func.args, func.kwargs):
这里发生了什么?我误会了什么?
【问题讨论】:
-
Inner itself 被定义为一个接受
*args和**kwargs的函数,这不是装饰器提供的东西。 -
所以@语法的一部分是否涉及将函数参数传递给
inner? -
@outer被调用来替换decorated,所以decorated("Bob")是inner('bob')。
标签: python python-3.x decorator