为什么调用python装饰函数?
Why python decorating function is invoked?
练习 python 3.8
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
@print_name3
def my_str(i):
return str(i)
@print_name2
def my_str2(i):
return str(i)
一旦我 运行 代码,我得到
3: my_str has been revoked
这让我很困惑,因为我还没有进行任何函数调用
在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)
我们基本上用 decorator-function returns 替换 my_str 和 my_str2。现在,print_name2 returns 一个打印内容的新函数,因此什么也不打印。同时,print_name3 立即打印一些东西,因为你没有将它包装在一个新函数中。
练习 python 3.8
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
@print_name3
def my_str(i):
return str(i)
@print_name2
def my_str2(i):
return str(i)
一旦我 运行 代码,我得到
3: my_str has been revoked
这让我很困惑,因为我还没有进行任何函数调用
在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)
我们基本上用 decorator-function returns 替换 my_str 和 my_str2。现在,print_name2 returns 一个打印内容的新函数,因此什么也不打印。同时,print_name3 立即打印一些东西,因为你没有将它包装在一个新函数中。