为什么将带有 n 个参数的函数传递给包含 0 个参数的装饰函数的子函数时抛出错误消息
Why is an error msg thrown when a function taking n parameters is passed to a sub function of a decorator function which contains 0 arguments
我是 python 的新手,正在尝试了解语言的功能和特性。
当我 运行 下面的代码时,我收到错误消息 "wrap() takes 0 positional arguments but 2 were given"。
class dec:
def decorator_function(orig):
def wrap():
print('hi')
return orig
return wrap
@decorator_function
def display_inf(name, age):
print('dispInf ran with args ({},{})'.format(name,age))
display_inf('John',35)
我明白错误消息是什么,如果我更改包装函数以包含如下 2 个参数,我将不会收到此消息。然而,我不明白为什么 python 会抛出错误。 display_inf 函数按预期传递给 decorator_function,但是就 wrap 函数而言,它所做的只是打印 hi。它甚至没有使用该功能,所以如果我不使用它,为什么我仍然会收到此错误。导致错误的幕后原因。
def decorator_function(orig):
def wrap(name, age):
print('hi')
return orig
return wrap
当您使用装饰器时,您的原始功能被替换为装饰器的return值。在您的示例中,display_inf
替换为 wrap
。由于 wrap
不接受任何参数,因此当您尝试使用参数调用它时,它会失败。
您似乎认为 wrap
将被调用一次并且应该 return 新函数,但事实并非如此。装饰器本身 (decorator_functrion
) return 是新函数,在您的情况下 return 是 wrap
。 wrap
永远无法实际打印任何内容,因为它使用错误数量的参数调用。
我是 python 的新手,正在尝试了解语言的功能和特性。 当我 运行 下面的代码时,我收到错误消息 "wrap() takes 0 positional arguments but 2 were given"。
class dec:
def decorator_function(orig):
def wrap():
print('hi')
return orig
return wrap
@decorator_function
def display_inf(name, age):
print('dispInf ran with args ({},{})'.format(name,age))
display_inf('John',35)
我明白错误消息是什么,如果我更改包装函数以包含如下 2 个参数,我将不会收到此消息。然而,我不明白为什么 python 会抛出错误。 display_inf 函数按预期传递给 decorator_function,但是就 wrap 函数而言,它所做的只是打印 hi。它甚至没有使用该功能,所以如果我不使用它,为什么我仍然会收到此错误。导致错误的幕后原因。
def decorator_function(orig):
def wrap(name, age):
print('hi')
return orig
return wrap
当您使用装饰器时,您的原始功能被替换为装饰器的return值。在您的示例中,display_inf
替换为 wrap
。由于 wrap
不接受任何参数,因此当您尝试使用参数调用它时,它会失败。
您似乎认为 wrap
将被调用一次并且应该 return 新函数,但事实并非如此。装饰器本身 (decorator_functrion
) return 是新函数,在您的情况下 return 是 wrap
。 wrap
永远无法实际打印任何内容,因为它使用错误数量的参数调用。