函数装饰器

#-----函数装饰器-----
 
1、作用域:L _E_G_B
2、高阶函数 a、函数名可以作为参数输入 b、函数名可以作为返回值
3、闭包
1 def outer():2     x = 103     def inner(): #inner是内部函数4         print(x) #外部环境的一个变量5     return inner #内部函数inner就是一个闭包6 outer()()7 8 #inner() #1、局部变量,全局变量无法调用


#-----关于闭包-----

  闭包 = 函数 + 定义函数时的环境

#代码原则:开放封闭原则  代码书写原则(对修改封闭,对扩展开放)

#-----装饰器函数

 1 import time 2  3 def show_time(f): #装饰器函数 4     def inner(): 5         start = time.time() 6         f() 7         time.sleep(1) 8         end = time.time() 9         print("spend %s"% (end-start))10     return inner11 12 @show_time13 def foo():14     print('test')15 #foo=show_time(foo)16 foo()17 18 @show_time19 def bar():20     print('bar')21 # bar = show_time(bar)22 bar()23 24 def show_time(f):25     def inner(x,y):26         start = time.time()27         f(x,y)28         time.sleep(1)29         end = time.time()30         print(end-start)31     return inner32 33 @show_time34 def add1(a,b):35     print(a+b)36 add1(1,2)
#-----装饰器加参数

 1 def logger(flag='False'): 2     def show_time(f): 3         def inner(*args): 4             start_time = time.time() 5             f(*args) 6             time.sleep(1) 7             end_time = time.time() 8             print(end_time-start_time) 9             if flag == "True":10                 print('log!')11         return inner12     return show_time13 14 @logger('True')15 def add(*args):16     sum1 = 017     for i in args:18         sum1 += i19     print(sum1)20 21 add(1,2,4)
计算机