使用带参数的类装饰器,没有print语句输出,但被装饰的函数结果却被输出

类装饰器学习过程中的疑问,为什么会输出结果。定义了以下的类带参数的类装饰器,其中被装饰的函数是以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'

img

请大家帮忙解答一下,为什么最后一句“'函数计算的结果是3'”会被输出,另外,输出结果中间那个空行是怎么来的。多谢了

应该是vscode中jpynb的问题,相同代码复制到pycharm里没有输出,jpynb这是要提醒用户函数return结果吗,中间还打了一个空行。之前一直用pycharm