为什么要调用python装饰函数?

时间:2020-09-07 06:03:36

标签: python python-3.x python-decorators

使用python 3.8的实践

3: my_str has been revoked

运行代码后,我得到

{{1}}

这让我感到困惑,因为我还没有进行任何函数调用

1 个答案:

答案 0 :(得分:2)

在python中,装饰器在装饰时执行。 您的代码与此等效:

import functools

def print_name2(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        print('2: {} has been revoked'.format(f.__name__))
        return f(*args, **kwargs)
    return wrapper


def print_name3(f):
    print('3: {} has been revoked'.format(f.__name__))
    return f

def my_str(i):
        return str(i)
my_str = print_name3(my_str)

def my_str2(i):
    return str(i)
my_str2 = print_name2(my_str2)

我们基本上用装饰器函数返回的值替换my_str和my_str2。现在,print_name2返回一个新函数,该函数将打印某些内容,因此为什么什么也不会打印。同时,由于您没有将print_name3包装在新函数中,因此它会立即打印一些内容。