在python中使用decorator时出现位置参数错误

2024-09-29 19:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在python中定义了一个decorator函数,但是在使用它时会出现位置参数错误。这是我的密码:

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)

我尝试用python2.7和python3.6运行代码。两者都返回了确切的错误


Tags: 函数namereturn定义mydef错误decorator
2条回答

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"))

正如错误所说,包装器函数不接受任何参数。它需要接受与其包装的函数相同的参数

def wrapper(arg):
    return func(arg).upper()

相关问题 更多 >

    热门问题