类装饰器学习过程中的疑问,为什么会输出结果。定义了以下的类带参数的类装饰器,其中被装饰的函数是以return的方式返回函数结果的,同样,在类装饰器也是return了函数结果,但运行时,却发现函数结果被输出了,在没有print语句的情况下,为什么结果会被输出呢。见代码如下:
# 例16. 类装饰器--带参数的类装饰器,思路和普通带参数装饰器类似
import time
class Timer:
"""这里是装饰器的说明,每次调用给出调用时间"""
def __init__(self, info) -> None: # 给出一个类装饰器的参数info
self.info = info
def __call__(self, func):
print(f'这里是类参数{self.info}的用法')
def inner(*args, **kwargs): # 在__call__里定义一个内部嵌套函数用来接收被装饰函数的参数
time_inner = time.strftime('%H点%M分%S秒')
print(f'在{time_inner}用类装饰器装饰函数{func.__name__}')
func_re = func(*args, **kwargs)
return func_re
return inner
@Timer(info='类参数info')
def fn1(a1, a2):
"""这里是被类装饰器装饰的函数"""
return f'函数计算的结果是{a1 + a2}'
fn1(1, 2)
运行后结果如下:
这里是类参数类参数info的用法
在15点40分03秒用类装饰器装饰函数fn1
'函数计算的结果是3'
请大家帮忙解答一下,为什么最后一句“'函数计算的结果是3'”会被输出,另外,输出结果中间那个空行是怎么来的。多谢了