直接上代码,这个例子是从《The Quick Python Book 2ed》里面抄出来的,代码是Python3的。

不用decorator的代码

1 def myfunction(parameter):
2     print(parameter[0])
3
4 myfunction("hello")

输出如下

h

使用decorator的代码

 1 def dec123(func):
 2     print("in decorate function, decorating", func.__name__)
 3
 4     def wrapper_func(*args):
 5         print("Executing", func.__name__)
 6         return func(*args)
 7     return wrapper_func
 8
 9
10 @dec123
11 def myfunction(parameter):
12     print(parameter[0])
13
14 myfunction("hello")

输出如下

in decorate function, decorating myfunction
Executing myfunction
h

没有实际项目中使用过,但是,这应该是一个很有用的特性。原函数myfunction打印参数下标0的元素,但是使用decorator的函数,即用dec123修饰的函数myfunction不止运行了原函数本身,还运行了原函数之前和之后的一些“修饰”代码。如果对myfunction的运行结果有怀疑的话,可以用decorator来debug,打印myfunction运行之前的运行状况和myfunction运行之后的运行状况,甚至可以用另一个函数替换myfunction。例如

 1 def dec123(func):
 2     print("in decorate function, decorating", func.__name__)
 3
 4     def wrapper_func(*args):
 5         print("Executing", func.__name__)
 6         return print(*args)
 7     return wrapper_func
 8
 9
10 @dec123
11 def myfunction(parameter):
12     print(parameter[0])
13
14 myfunction("hello")

将myfunction改为调用print,输出如下

in decorate function, decorating myfunction
Executing myfunction
hello

这样的写法似乎太邪恶了,如果纯粹出于debug的目的也就算了,改完记得把代码还原......

转载于:https://www.cnblogs.com/valleylord/p/3488886.html

Python一个很好玩的特性decorator相关推荐

  1. 介绍大家一个很好玩的网站。多人在线flash联机游戏。

    介绍大家一个很好玩的网站.多人在线flash联机游戏. http://www.iminlikewithyou.com/ 在首页的左下角可以选择游戏.有炸弹超人(Balloono).putt putt ...

  2. C语言写一个很好玩的皇帝的后宫小游戏

    C语言写一个很好玩的皇帝的后宫小游戏 前言 先演示一下 上源码 总结 前言 只是单纯喜欢C语言,闲着无事把以前学习的时候的案例编了一下,都是很基础的代码,for,swich,if这些,基础好的看完后完 ...

  3. Family.Show:一个很好玩的东东

    请参考http://familyshow.codeplex.com/,类似于一个家谱的软件 主要使用的技术是WPF 转载于:https://www.cnblogs.com/chenxizhang/ar ...

  4. 一个很变态,但是.......可以让你迅速掌握python的方法

    从业多年,我想根据自己的行业经验给大家提一些建议. 和其他行业相比,做python开发确实是容易找工作一点,毕竟受用面毕竟广,现在很多刚毕业的从事python开发都有8K左右的薪资,稍微有点经验的都是 ...

  5. python写一个很简单的Atm机系统,使用pickle模块和json模块来保存数据

    我做的是一个很简单的Atm系统,很多都没约束条件 目的: 用面向对象思维来处理 运用文件的读写 文件的读写用pickle模块和json模块来处理 pickle模块: pickle模块处理数据功能很强大 ...

  6. proj Java_proj 一个炫酷的飞机大战java游戏,很好玩的,很酷炫 用了 的图形界面 Games 256万源代码下载- www.pudn.com...

    文件名称: proj下载  收藏√  [ 5  4  3  2  1 ] 所属分类: Games 开发工具: Java 文件大小: 3435 KB 上传时间: 2016-05-11 下载次数: 0 提 ...

  7. 使用Python生成动态图表,一个很Cool的教程

    作者 | Viviane 译者 | 刘旭坤 编辑 | Jane 出品 | AI科技大本营 [导读]Matplotlib 和 Seaborn 用来做数据固定的静态图表很不错,但如果需要动态显示数据的变化 ...

  8. LeetCode 605[Python]. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

    LeetCode 605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和 ...

  9. python找工作难吗-Python虽然很火,为啥找工作这么难?

    原标题:Python虽然很火,为啥找工作这么难? 前几天看到某论坛有人提了这么个问题,Python这么火,为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把,让中小学生.非程序 ...

  10. python 制作gif-利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有 ...

最新文章

  1. java 继承类 变量、静态变量、构造函数执行顺序
  2. VS的几个实用快捷键
  3. python变量如何使用,python如何使用变量
  4. 电子商务与计算机科学与技术的相关性,电子商务、计算机科学与技术、法学等相关专业。.doc...
  5. python中函数的参数
  6. Djangosocket简单实现django简化版
  7. java 对象和类
  8. QStackedWidget设置无效问题
  9. Border Layout
  10. MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
  11. php跳转图片_HTML点击图片跳转到新页面怎么实现?(示例)
  12. 基金公司十大非货规模逆袭(2010-2020)
  13. 禁止屏幕保护使用密码
  14. python selenium 弹出框定位_selenium弹框元素定位-冻结界面
  15. 你可以有喜欢和善用的语言,但千万不要和她Bind
  16. C++ 分配器 allocator
  17. 爱尔兰咖啡(作者:痞子蔡)
  18. 推荐电影 迪士尼经典动画片大全 1937-2008
  19. 打造可用的梅花6硬键盘
  20. 今日早报,365资讯简报12条,热点新闻早知道

热门文章

  1. 传输层协议(10):滑动窗口(4)
  2. 平衡二叉树(AVL Tree)
  3. DPDK初始化分析(一)
  4. Android 高通 Wi-Fi 驱动
  5. 最小生成树 POJ - 3522(枚举边最小生成树)
  6. Linux打印全部的内容,linux提取指定列字符并打印所有内容(awk)
  7. jquery radio设置选中_前端jQuery实战之 attr() 和 prop() 的区别
  8. git revert 回滚代码至上一版本
  9. 2003 -服务器没有响应,PowerPoint2003
  10. jquery ajax 删除确认,jquery 漂亮的删除确认和提交无刷新删除示例