Python3 装饰器

  1 '''
  2 所用知识点:
  3 1.作用域 :L>E>G>B
  4 2.高阶函数:
  5     满足两个条件中的一个就行:
  6     1.函数名可以作为参数输入
  7     2.函数名可以作为返回值
  8 3.闭包
  9 
 10 '''
 11 
 12 
 13 '''
 14 闭包
 15 python中的闭包从表现形式上定义为:
 16 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,
 17 那么内部函数就被称为闭包。
 18  '''
 19 # def out1():
 20 #     x = 10
 21 #     def in1():      # 内部函数
 22 #         y = 1
 23 #         print(x)    # 对外部作用域的变量进行引用
 24 #     return in1      # 内部函数in1称之为闭包
 25 # 
 26 # # 调用in1()
 27 # # 方法一
 28 # out1()()
 29 # # 方法二
 30 # p = out1()
 31 # p()
 32 # #
 33 # # in1()     # 局部变量,全局无法调用
 34 # #
 35 # 
 36 '''
 37 闭包 = 函数块(内部函数) + 定义函数时的环境(变量引用)
 38 '''
 39 # 
 40 # import time
 41 # 
 42 # # start = time.time()     # 开始时间
 43 # # time.sleep(1)           # 间歇时间,间歇1s
 44 # # end = time.time()       # 结束时间
 45 # 
 46 # def p1():
 47 # #    print(start)        # 从1970-01-01开始计算秒数
 48 #     st1 = time.time()
 49 #     print('Hello World')
 50 #     time.sleep(5)
 51 #     end1 = time.time()
 52 #     print('花费了 %s 秒'%(end1 - st1))
 53 # p1()
 54 # 
 55 '''
 56 。。。。。。
 57 n多个类似需要计算时间的函数
 58 此时为了方便起见,创建一个专门用于计算时间的函数
 59 '''
 60 # 
 61 # def showtime(x):
 62 #     start2 = time.time()
 63 #     x()
 64 #     end2 = time.time()
 65 #     print('程序花费了 %s 秒' % (end2-start2))
 66 # 
 67 # def test():
 68 #     time.sleep(2)
 69 #     print('Yeah')
 70 # 
 71 # showtime(test)
 72 # 
 73 '''
 74 装饰器:
 75 为之前的函数添加新的功能
 76 '''
 77 # 
 78 # 
 79 # def showt(c):
 80 #     def a():
 81 #         start2 = time.time()
 82 #         c()
 83 #         end2 = time.time()
 84 #         print('程序花费了 %s 秒' % (end2 - start2))
 85 #     return a
 86 # 
 87 # @showt      # 等价于z = showt(test1)
 88 #             # 但要放在函数之前
 89 # def test1():
 90 #     time.sleep(1)
 91 #     print(123)
 92 # test1()
 93 # 
 94 # 
 95 '''
 96 被装饰器修饰的参数
 97 '''
 98 # 
 99 # def fun1(x):
100 #     def in_fun1(*y,**z):
101 #         start = time.time()
102 #         x(*y,**z)
103 #         end = time.time()
104 #         print('此程序用了%s秒' % (end-start))
105 #     return in_fun1
106 # 
107 # @fun1
108 # 
109 # def fun2(*a,**b):
110 #     Sum = 0
111 #     for i in a:
112 #         Sum += i
113 #     print(Sum)
114 #     time.sleep(2)
115 # fun2(3,5,1)
116 # 
117 # 
118 # # 功能函数加参数
119 # def loge(s=''):
120 #     def fun3(q):
121 #         def infun3(*x,**y):
122 #             start = time.time()
123 #             q(*x,**y)
124 #             end = time.time()
125 #             print('%s 秒' % (end-start))
126 #             if  s == 'true':
127 #                 print('loge !!!')
128 #         return infun3
129 #     return fun3
130 # 
131 # @loge('true')       # 中间的参数‘true’可以写成其他的,只不过不会出来loge
132 # def test3():
133 #     print('test3')
134 #     time.sleep(1)
135 # test3()
原文地址:https://www.cnblogs.com/Infi-chu/p/7676260.html