装饰器,迭代器,生成器
一、什么是装饰器
装饰器本质就是函数,功能是为其他函数附加功能
二、装饰器遵循的原则
1、不修改被修饰函数的源代码
2、不修改被修饰函数的调用方式
三、实现装饰器的知识储备
装饰器=高阶函数+函数嵌套+闭包
高阶函数,直接通过函数名调用,
#!/usr/bin/env python def bar(): print('in the bar') def test1(func): func() test1(bar)
实现bar()的运行时间,用test1来调用bar().计算bar()的运行时间,
#!/usr/bin/env python import time def bar(): time.sleep(3) print('in the bar') def test1(func): start_time=time.time() func() stop_time=time.time() print('the func run time is %s' %(stop_time-start_time)) #func=bar #func() == bar()--->func()其实就是bar() test1(bar)
timer装饰器的使用,
#!/usr/bin/env python import time def timer(func): #timer(test1) def deco(): start_time=time.time() func() #run test1() stop_time=time.time() print('the func run time is %s' %(stop_time-start_time)) return deco @timer def test1(): time.sleep(1) print('in the test1') #test1=timer(test1),,用@timer调用 test1()
in the test1
the func run time is 1.0
传入参数的装饰器,
#!/usr/bin/env python import time def timer(func): def deco(*args,**kwargs): start_time=time.time() func(*args,**kwargs) stop_time=time.time() print('the func run time is %s' %(stop_time-start_time)) return deco @timer def test1(): time.sleep(1) print('in the test1') @timer def test2(name,age): print('test2',name,age) test1() test2('mark','33')
in the test1
the func run time is 1.0
test2 mark 33
the func run time is 0.0
浙公网安备 33010602011771号