mannono5 发表于 2020-12-6 05:07:42

函数装饰器问题

本帖最后由 mannono5 于 2020-12-6 05:14 编辑

class timeslong(object):
    def __init__(self,func):
      self.f = func
    def __call__(self):
      import time
      start = time.time()
      print("It's time starting ! ")
      self.f()
      print("It's time ending ! ")
      end = time.time()
      return "It's used : %s ." % (end - start)
   

@timeslong
def f():
    y = 0
    for i in range(10):
      y = y + i + 1
      print(y)
    return y

print(f()) #这是原编码有打印call 的 return
f() # 我自己去掉print(), 结果没有打印call 的 return


为什么print(f()) 有打印call 的 return, 而f() 不打印call 的 return??

逃兵 发表于 2020-12-6 08:26:04

>>> print(f())
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
It's used : 0.08200478553771973 .
>>> f()
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
"It's used : 0.07900452613830566 ."

heidern0612 发表于 2020-12-6 08:35:43

因为你返回的就是个字符串,字符串不打印出不来。

mannono5 发表于 2020-12-6 10:25:12

逃兵 发表于 2020-12-6 08:26


???怎么回事,之前我那边出不来,现在可以了?

逃兵 发表于 2020-12-6 10:46:25

mannono5 发表于 2020-12-6 10:25
???怎么回事,之前我那边出不来,现在可以了?

{:10_277:}
文本模式下不行,交互模式下可以
字符串是函数的返回值,函数中并没有print这个字符串的指令
所以不会打印的
页: [1]
查看完整版本: 函数装饰器问题