标签:app color 源码修改 参数 size 而不是 嵌套 返回值 源码
#最简单的无参闭包函数 def func1() name=‘ares‘ def func2() print(name) #有参和返回值的闭包函数 def timmer(func): def wrapper(*args,**kwargs): start_time = time.time() res=func(*args,**kwargs) stop_time=time.time() print(‘run time is %s‘ %(stop_time-start_time)) return res return wrapper
#高阶函数应用1:把函数当做参数传给高阶函数 import time def foo(): print(‘from the foo‘) def timmer(func): start_time=time.time() func() stop_time=time.time() print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time)) timmer(foo) #总结:我们确实为函数foo增加了foo运行时间的功能,但是foo原来的执行方式是foo(),现在我们需要调用高阶函数timmer(foo),改变了函数的调用方式 #高阶函数应用2:把函数名当做参数传给高阶函数,高阶函数直接返回函数名 import time def foo(): print(‘from the foo‘) def timmer(func): start_time=time.time() return func stop_time=time.time() print(‘函数%s 运行时间是%s‘ %(func,stop_time-start_time)) foo=timmer(foo) foo() #总结:我们确实没有改变foo的调用方式,但是我们也没有为foo增加任何新功能
#函数的嵌套定义 def f1(): def f2(): def f3(): print(‘from f3‘) print(‘from f2‘) f3() print(‘from f1‘) f2() # print(f1) f1() ‘‘‘ from f1 from f2 from f3 ‘‘‘
#这就是一个实现一个装饰器最基本的架子 def timer(func): def wrapper(): func() return wrapper
统计一个函数运行时间的装饰器
# import time # import random # #装饰器 # def timmer(func): # # func=index # def wrapper(): # start_time = time.time() # func() #index() # stop_time=time.time() # print(‘run time is %s‘ %(stop_time-start_time)) # return wrapper # #被装饰函数 # def index(): # time.sleep(random.randrange(1,5)) # print(‘welecome to index page‘) # # def home(): # time.sleep(random.randrange(1,3)) # print(‘welecome to HOME page‘) # # index=timmer(index) #index=wrapper # home=timmer(home) # # index() #wrapper() # home()
装饰器的语法:在被装饰对象的正上方的单独一行,@装饰器名字,#@timer就等同于index=timmer(index)
import time import random #装饰器 def timmer(func): def wrapper(): start_time = time.time() func() stop_time=time.time() print(‘run time is %s‘ %(stop_time-start_time)) return wrapper #被装饰函数 @timmer #index=timmer(index) def index(): time.sleep(random.randrange(1,5)) print(‘welecome to index page‘) # @timmer #home=timmer(home) # def home(): # time.sleep(random.randrange(1,3)) # print(‘welecome to HOME page‘) index() #wrapper() # home()
加多个装饰器:
#加多个装饰器 import time import random #装饰器 def timmer(func): def wrapper(): start_time = time.time() func() stop_time=time.time() print(‘run time is %s‘ %(stop_time-start_time)) return wrapper def auth(func): def deco(): name=input(‘name: ‘) password=input(‘password: ‘) if name == ‘egon‘ and password == ‘123‘: print(‘login successful‘) func() #wrapper() else: print(‘login err‘) return deco #被装饰函数 #多个装饰函数,从上往下添加,调用时从下往上 @auth #index=auth(wrapper) #index=deco #index=auth(wrapper) #index=deco @timmer #index=timmer(index) #index=wrapper def index(): # time.sleep(random.randrange(1,5)) time.sleep(3) print(‘welecome to index page‘) def home(): time.sleep(random.randrange(1,3)) print(‘welecome to HOME page‘) # index() #deco() # home()
装饰器修订:
#装饰器修订 import time import random #装饰器 def timmer(func): def wrapper(*args,**kwargs): start_time = time.time() res=func(*args,**kwargs) #接收参数 stop_time=time.time() print(‘run time is %s‘ %(stop_time-start_time)) return res #增加返回值 return wrapper #被装饰函数 @timmer def index(): time.sleep(random.randrange(1,5)) print(‘welecome to index page‘) @timmer def home(name): time.sleep(random.randrange(1,3)) print(‘welecome to %s HOME page‘ %name) return 123123123123123123123123123123123123123123 index() res1=index() print(‘index return %s‘ %res1) res2=home(‘egon‘) #wraper() print(‘home return %s‘ %res2)
标签:app color 源码修改 参数 size 而不是 嵌套 返回值 源码
原文地址:http://www.cnblogs.com/shenbuer/p/7055214.html