发布于2019-08-07 16:24 阅读(1038) 评论(0) 点赞(0) 收藏(4)
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.pythonheidong.com/blog/article/11515/5dcb5162cadfab6974ad/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!