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

Python自学之乐-装饰器浅谈

时间:2017-08-17 00:46:25      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:运行时间   完成   运行时   test   func   搜索   系统   简单   strong   

以前学过点 面向对象的知识,我感觉这之间是有关联的,比如说装饰器的第一个要素是对被装饰的函数的封闭性,不允许更改;第二个就是对装饰器本oj身的可扩展性。

装饰器要点:高阶函数+嵌套函数=装饰器

需要掌握的知识点:1、函数即变量

2、高阶函数(函数的参数也是函数)

3、嵌套函数

装饰器一:装饰器不带参数,被装饰的函数也不带参数

简单的需求:现有两个简单的打印内容的函数,现在需要在不改变两个函数源代码的情况下统计每个函数运行时间

import time
def timer(func):#用到高阶函数
def deco():#用到函数嵌套
start_time = time.time()
func()
stop_time = time.time()
print("the func run %s" %(stop_time-start_time))
return deco
@timer
def test1():
time.sleep(3)
print("i am test1")
@timer
def test2():
time.sleep(3)
print("i am test2")
test1()
test2()
执行顺序:首先程序自上往下走,走到定义的timer函数的时候会跳到@timer处,检测到timer被作为装饰器了,系统会去搜索哪些地方使用了timer作为装饰器,搜索完成后,执行timer;紧接着执行我们调用的test1(),因为test1被timer装饰了,所以会先去执行装饰器,在装饰器内部执行到func()时,此时func()就是test1()! test2()也是一样
装饰器的效果就是:没有改变原来函数的源代码和函数调用方式,又给函数增加了新功能

装饰器二:被装饰函数带参数
装饰器三:被装饰函数有返回值
装饰器四:装饰器本身带参数



Python自学之乐-装饰器浅谈

标签:运行时间   完成   运行时   test   func   搜索   系统   简单   strong   

原文地址:http://www.cnblogs.com/clarkxhb/p/7376643.html

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