装饰器,迭代器,生成器

 

一、什么是装饰器

  装饰器本质就是函数,功能是为其他函数附加功能

 

二、装饰器遵循的原则

1、不修改被修饰函数的源代码

2、不修改被修饰函数的调用方式

 

三、实现装饰器的知识储备

装饰器=高阶函数+函数嵌套+闭包

 

高阶函数,直接通过函数名调用,

#!/usr/bin/env python

def bar():
    print('in the bar')

def test1(func):
    func()

test1(bar)
View Code

实现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)
View Code

 

 

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

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')
View Code

 in the test1
the func run time is 1.0
test2 mark 33
the func run time is 0.0

posted @ 2017-04-16 10:52  寻_找北极星  阅读(148)  评论(0)    收藏  举报