Python之----装饰器
2018-06-18 00:07:30来源:未知 阅读 ()
作用:
在不改变函数源代码的前提下,给函数增加新的功能。
装饰器
1,本质上是一个函数
2,功能---装饰其他函数(为其他函数添加其他功能)
3,不能修改被装饰函数的源代码
4,不能修改被装饰函数的调用方式
实现装饰器的知识储备:
1,函数即“变量”
2,高阶函数
a,把一个函数当作实参,传给另外一个函数(在不修改被装饰函数源代码情况下,为其增加功能)
b,返回值包含函数名(不修改函数的调用方式)
例子:
def bar():
print("this is bar")
def test(func):
print("this is test")----看作是添加的新功能
return func--------------bar其实就是一个内存地址,加上()的时候就能调用。当把bar当作参数传给test的时候,返回的就是bar内存地址。
bar = test(bar)-------------这个操作就相当于:即给了bar一个内存地址使其加上()能调用,且能将test函数里的print内容展示出来
bar()
运行结果:
this is test
this is bar
3,嵌套函数
在函数内部def一个函数。
def test():
print("hahaha")
def bar():
print("bababa")
bar()
test()
运行结果:
hahaha
bababa
高阶函数+嵌套函数 =>装饰器
import time
def timer(func):
def dec(*args,**kwarge):#加上这两个,是预防被装饰的函数带有参数。
start_time = time.time()
func(*args,**kwarge)#加上这两个,是预防被装饰的函数带有参数。
end_time = time.time()
print("pro run time is %s"%(end_time-start_time))
return dec
@timer #等价于 test1 = timer(test1)。timer(test1)这个函数执行结果是返回了 dec的内存地址。-----高阶函数知识点:返回值包含函数名
#其实就是相当于把dec对应的那个内存空间再多加了一个名字“test1”
#而原先的test1的内存空间当作一个参数,传给了timer,并给了个名字func。-----高阶函数知识点:把函数当作实参,传给另外一个函数
def test1():
time.sleep(3)
print("this is test1")
def test2(name):
print("welecome %s"%name)
test1()#所以当执行到这一段的时候,其实是执行的dec(),然后接下来步骤就显而易见了。
test2()
装饰器自己也可以带参数
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:20171218-编程语言的介绍
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash