python利用装饰器进行运算的实例分析


Posted in Python onAugust 04, 2015

今天想用python的装饰器做一个运算,代码如下

>>> def mu(x):
  def _mu(*args,**kwargs):
    return x*x
  return _mu

>>> @mu
def test(x,y):
  print '%s,%s' %(x,y)

>>> test(3,5)

Traceback (most recent call last):
 File "<pyshell#111>", line 1, in <module>
  test(3,5)
 File "<pyshell#106>", line 3, in _mu
  return x*x
TypeError: unsupported operand type(s) for *: 'function' and 'function'

原来是不能这样弄的  函数与函数是不能运算的啊!

怎么办呢?

In [1]: from functools import wraps

In [2]: def mu(x):
  ...:     @wraps(x)
  ...:     def _mu(*args,**kwargs):
  ...:             x,y=args
  ...:             return x*x
  ...:     return _mu
  ...: 

In [3]: @mu
  ...: def test(x,y):
  ...:     print '%s,%s' %(x,y)
  ...:   

In [4]: test(3,4)
Out[4]: 9

Python装饰器(decorator)在实现的时候,有一些细节需要被注意。例如,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)

Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。

以上所述就是本文的 全部内容了,希望大家能够喜欢。

Python 相关文章推荐
Python max内置函数详细介绍
Nov 17 Python
对python中return和print的一些理解
Aug 18 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
python timestamp和datetime之间转换详解
Dec 11 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
python实现机器学习之多元线性回归
Sep 06 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
如何通过Python实现标签云算法
Jul 02 Python
python属于解释语言吗
Jun 11 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
浅谈python多线程和队列管理shell程序
Aug 04 #Python
python中使用序列的方法
Aug 03 #Python
python实现备份目录的方法
Aug 03 #Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 #Python
浅谈Python中列表生成式和生成器的区别
Aug 03 #Python
详解Python3中的Sequence type的使用
Aug 01 #Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 #Python
You might like
php 缓存函数代码
2008/08/27 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
javascript 必知必会之closure
2009/09/21 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
angularjs中的$eval方法详解
2017/04/24 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
python比较两个列表大小的方法
2015/07/11 Python
详解Python中dict与set的使用
2015/08/10 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python 获取等间隔的数组实例
2019/07/04 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
销售会计工作职责
2013/12/02 职场文书
人事主管岗位职责范本
2013/12/04 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android