我已经在python中定义了一个装饰器函数,但是使用它时出现位置参数错误。这是我的代码:
def my_upper_case(func):
def wrapper():
return func().upper()
return wrapper
@my_upper_case
def print_name(name):
return name
if __name__ == "__main__":
print(print_name("zeinab"))
返回的错误是:
Traceback (most recent call last):
File "test.py", line 31, in <module>
print(print_name("zeinab"))
TypeError: wrapper() takes no arguments (1 given)
我尝试同时使用python 2.7和python 3.6运行代码。两者都返回了确切的错误。
答案 0 :(得分:3)
如错误所述,您的包装器函数不接受任何参数。它需要接受与其包装的函数相同的args。
def wrapper(arg):
return func(arg).upper()
答案 1 :(得分:0)
wrapper
包装函数,这意味着它将“代替其位置”。
因此,如果您调用print_name("zeinab")
,则将使用wrapper("zeinab")
来调用包装器。
wrapper
不接受"zeinab"
参数,因为您没有为其提供任何参数。
def my_upper_case(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs).upper()
return wrapper
@my_upper_case
def print_name(name):
return name
if __name__ == "__main__":
print(print_name("zeinab"))