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()