#-----函数装饰器-----
1、作用域:L _E_G_B
2、高阶函数 a、函数名可以作为参数输入 b、函数名可以作为返回值
3、闭包
1 def outer(): 2 x = 10 3 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 inner 11 12 @show_time 13 def foo(): 14 print('test') 15 #foo=show_time(foo) 16 foo() 17 18 @show_time 19 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 inner 32 33 @show_time 34 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 inner 12 return show_time 13 14 @logger('True') 15 def add(*args): 16 sum1 = 0 17 for i in args: 18 sum1 += i 19 print(sum1) 20 21 add(1,2,4)