鱼C论坛

 找回密码
 立即注册
查看: 2985|回复: 3

[已解决]修饰符

[复制链接]
发表于 2016-5-22 20:44:10 | 显示全部楼层 |阅读模式
10鱼币
import time

def timeslong(func):
    def call():
        start = time.clock()
        print("It's time starting ! ")
        func()
        print("It's time ending ! ")
        end = time.clock()
        return "It's used : %s ." % (end - start)
    return call

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

print(f())
这是小甲鱼拓展阅读里修饰符的例子
显示结果如下:
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
It's used : 0.06889504282846866 .

但是如果没有修饰器
也就是说只有函数部分:
def f():
    y = 0
    for i in range(10):
        y = y + i + 1
        print(y)
    return y

print(f())
结果如下:
1
3
6
10
15
21
28
36
45
55
55
也就是说。其结果会多显示一个55  .
为什么用了修饰器。结果显示的这个55(也就是return y)这个就不显示了?
求解释
最佳答案
2016-5-22 20:44:11
  1. import time
  2. def timeslong(func):
  3.     def call():
  4.         start = time.clock()
  5.         print("It's time starting ! ")
  6.         func()
  7.         print(func())  #把函数f()的结果打印出来,也就是f()的返回值。
  8.         print("It's time ending ! ")
  9.         end = time.clock()
  10.         return "It's used : %s ." % (end - start)
  11.     return call

  12. @timeslong
  13. def f():
  14.     y = 0
  15.     for i in range(10):
  16.         y = y + i + 1
  17.         print(y)
  18.     return '是否已经执行了return '+str(y)
  19.      
  20. if __name__ == '__main__':   
  21.     print(f())
  22. #备注:return和print是不同的,虽然单独执行一个函数时,
  23. #return和print都能把结果显示在shell里,return是返回值,print是打印显示语句。
  24. #在程序执行流程过程中,shell是不会实时显示调用的每个不同函数return的返回值,但会显示
  25. #你所调用的每个函数中有print 的语句.
复制代码

我Python学完后已经六个多月没看过和写Python代码了,有点生疏!在一家大型上市互联网公司工作,从事php开发,php、sql和javascript/Jquery或者css、html方面的代码写的比较多。

最佳答案

查看完整内容

我Python学完后已经六个多月没看过和写Python代码了,有点生疏!在一家大型上市互联网公司工作,从事php开发,php、sql和javascript/Jquery或者css、html方面的代码写的比较多。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-22 20:44:11 | 显示全部楼层    本楼为最佳答案   
  1. import time
  2. def timeslong(func):
  3.     def call():
  4.         start = time.clock()
  5.         print("It's time starting ! ")
  6.         func()
  7.         print(func())  #把函数f()的结果打印出来,也就是f()的返回值。
  8.         print("It's time ending ! ")
  9.         end = time.clock()
  10.         return "It's used : %s ." % (end - start)
  11.     return call

  12. @timeslong
  13. def f():
  14.     y = 0
  15.     for i in range(10):
  16.         y = y + i + 1
  17.         print(y)
  18.     return '是否已经执行了return '+str(y)
  19.      
  20. if __name__ == '__main__':   
  21.     print(f())
  22. #备注:return和print是不同的,虽然单独执行一个函数时,
  23. #return和print都能把结果显示在shell里,return是返回值,print是打印显示语句。
  24. #在程序执行流程过程中,shell是不会实时显示调用的每个不同函数return的返回值,但会显示
  25. #你所调用的每个函数中有print 的语句.
复制代码

我Python学完后已经六个多月没看过和写Python代码了,有点生疏!在一家大型上市互联网公司工作,从事php开发,php、sql和javascript/Jquery或者css、html方面的代码写的比较多。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-24 01:09:30 | 显示全部楼层
当有修饰符的时候,其实是把f()这个函数给嵌套在修饰符函数里面,所以f()函数return y是把y值给了修饰符函数,但是修饰符函数并没有对这个y进行打印,所以最后shell是打印了修饰符timelong()这个的返回值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-4 09:25:11 | 显示全部楼层
长见识了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-21 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表