import time def timer(f): # 这是一个装饰器函数 def inner(): start = time.time() f() # 被装饰的函数 end = time.time() print('函数执行了%d秒' %(end-start) ) return inner @timer # 语法糖 @装饰器函数名 def func(): # 被装饰的函数 time.sleep(3) print('这是一个函数执行的内容') func() 装饰带参数函数的装饰器 import…
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数,这个特殊的功能就是:装饰另一个函数.举一个最简单的例子来说: def identify(f): print 'Decorator identify called.' return f 这里identify其实是一个装饰器,这个装饰器对输入的参数f不进行任何修饰,然后返回这个参数.其中的打印语句是用…
对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶上这顶帽子,这顶帽子我们称之为 装饰器 . 曾经我在刚转行做程序员时的一次的面试中,被面试官问过这样的两个问题: 1.你都用过装饰器实现过什么样的功能? 2.如何写一…
01. 装饰器语法糖 如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶上这顶帽子,这顶帽子我们称之为装饰函数 或 装饰器. 你要问我装饰器可以实现什么功能?我只能说你的脑洞有多大,装饰器就有多强大. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以…
装饰器:本质就是函数,功能是为其他函数添加附加功能. 两个原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 一个栗子 def test(): res = 0 for i in range(50): res += i print(res) test()结果:1225 需求:要想计算上述函数的运行时间,既不修改被修饰函数的源代码,又不修改被修饰函数的调用方式,关键还要能添加进附加功能,如何实现? 如下,初级版本一:直接修改了被修饰函数的源代码 import time def te…
1.装饰器的作用 在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能 原则: 1.不修改被装饰对象的源代码2.不修改被装饰对象的调用方式 目标: 为被装饰对象添加新功能 2.装饰器的定义和使用 来看下面的代码: index函数的作用是程序在随机睡眠1到5秒之后,打印一句话 现在想为index函数添加一个新功能:统计index函数的运行时间,该怎么做呢?? 修改index函数如下: 运行程序,执行结果如下: welcome to index pagecost time: 2.00…
如何理解Python装饰器?很多学员对此都有疑问,那么上海尚学堂python培训这篇文章就给予答复. 一.预备知识 首先要理解装饰器,首先要先理解在 Python 中很重要的一个概念就是:“函数是 First Class Member” .这句话再翻译一下,函数是一种特殊类型的变量,可以和其余变量一样,作为参数传递给函数,也可以作为返回值返回,上海python培训. def abc(): print("abc") def abc1(func): func()abc1(abc) 这段代码…
什么是装饰器? python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能. 这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数. 一般而言,我们要想拓展原来函数代码,最直接的办法就是侵入代码里面修改,例如: import time def f(): print("hello") time.sleep(1) print("world") 这…
在Python学习的过程中,装饰器是比较难理解的一个应用.本人也在学习期间也遇到很多坑,现将装饰器的基本调用过程总结一下. 首先,装饰器用到了“闭包”,而“闭包”是学习装饰器的基础,所以在讲装饰器之前先将“闭包”的基本概念带大家一起回顾一下: 现有如下函数: def func(): def func1(): print('i\'m func1') return func1if __name__ == '__main__': f = func() f() print('函数func1的内存地址为:…
装饰器 装饰器实质是一个函数,其作用就是在不改动其它函数代码的情况下,增加一些功能.如果我们需要打印函数调用前后日志,可以这么做 def log(func): print('%s is running' % func.__name__) func() def bar(): print('bar') #将bar作为函数log参数传入 >>>log(bar) bar is running bar 这样写下来一个函数打印一个函数的日志是没有问题的,但是很多呢? def log(func) de…