李海,谱瑞智能 2022-11-30 15:56 采纳率: 66.7%
浏览 13
已结题

使用带参数的类装饰器,没有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'”会被输出,另外,输出结果中间那个空行是怎么来的。多谢了

  • 写回答

1条回答 默认 最新

  • 李海,谱瑞智能 2022-11-30 16:23
    关注

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

    评论

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥50 有偿!centos curl port设置问题
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView
  • ¥15 如何使用shufflenet进行手写数字识别
  • ¥20 微信小程序播放直播流
  • ¥15 关于迷宫自走单片机循迹小车的知识
  • ¥15 python使用selenium工具爬取网站的问题
  • ¥15 visual studio中c语言用ODBC链接SQL SERVER