python装饰器(披着羊皮的狼)
2019-02-17 01:53:24来源:博客园 阅读 ()
python装饰器的作用是在不改变原有函数的基础上,对函数的功能进行增加或者修改。
装饰器语法是python语言更加优美且避免很多繁琐的事情,flask中配置路由的方式便是装饰器。
首先python中一个函数也是可以当做一个对象进行传递的。
1 def sheep(f): 2 def she(): 3 print("I'm a sheep") 4 return f() 5 return she 6 7 @sheep 8 def wolf(): 9 print("I'm a wolf") 10 11 if __name__ == "__main__": 12 wolf()
输出结果为
I'm a sheep I'm a wolf
上面代码相当于
wolf = sheep(wolf)
wolf()
带参数的装饰器
1 def change(a): 2 def sheep(f): 3 def she(): 4 print("I'm a sheep") 5 f() 6 print("you're not ,you're {} sheep".format(a)) 7 return she 8 return sheep 9 10 @change("fake") 11 def wolf(): 12 print("I'm a wolf") 13 14 if __name__ == "__main__": 15 wolf()
结果:
I'm a sheep I'm a wolf you're not ,you're fake sheep
相当于
wolf = change("fake")(wolf) wolf()
其实函数名此时发生了改变
wolf.__name__的值为she
解决办法为使用functools.wraps
1 import functools 2 3 def change(a): 4 def sheep(f): 5 @functools.wraps(f) 6 def she(): 7 print("I'm a sheep") 8 f() 9 print("you're not ,you're {} sheep".format(a)) 10 return she 11 return sheep 12 13 def wolf(): 14 print("I'm a wolf") 15 16 if __name__ == "__main__": 17 wolf = change("fake")(wolf) 18 wolf()
原文链接:https://www.cnblogs.com/jay-col/p/10381382.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 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