码迷,mamicode.com
首页 > 编程语言 > 详细

Python进阶【第九篇】装饰器

时间:2018-04-07 01:13:18      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:装饰器   time   print   局部变量   highlight   分享图片   闭包   import   art   

什么是装饰器

装饰器本身就是函数,并且为其他函数添加附加功能

装饰器的原则:1.不修改被装饰对象的源代码  2.不修改被装饰对象的调用方式
装饰器=高阶函数+函数嵌套+闭包

技术分享图片

# res=timmer(test)  #返回的是wrapper的地址 # res()  #执行的是wrapper()

# test=timmer(test)  #返回的是wrapper的地址 # test()  #执行的是wrapper()

#  @timmer  就相当于 test=timmer(test)

 

# #搭一个高阶函数与函数嵌套的框架
# def timmer(func):
#     def wrapper():
#         print(func)
#         func()
#     return wrapper
import time
def timmer(func):
    def wrapper():
        start_time=time.time()
        # print(func)
        res=func()#由于执行新获得的test,所以执行wrapper,func作为局部变量,当前没有,便往上一层去找,即test,运行test
        stop_time = time.time()
        print(‘运行时间是%s‘ %(stop_time -start_time))
        #wrapper里没有返回值,所以不管怎么改变test,返回值都是none
        return res#由于func运行的就是test,所以将func的值赋给res,再返回res就是test的返回值
    return wrapper
@timmer#相当于test = timmer(test)#把test函数作为参数传给timmer,执行timmer获取到返回值wrapper,并将其赋给test
def test():
    time.sleep(3)
    print(‘test运行完毕‘)
    return ‘这是test的返回值‘


test()#执行新的test,实际就是执行wrapper,这是为了不改变test的调用方式

 

Python进阶【第九篇】装饰器

标签:装饰器   time   print   局部变量   highlight   分享图片   闭包   import   art   

原文地址:https://www.cnblogs.com/bep-feijin/p/8729333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!