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获取运行目录与当前脚本目录的方法
Jun 01 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
dataframe设置两个条件取值的实例
Apr 12 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
浅谈Python中的bs4基础
Oct 21 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
pytorch 实现查看网络中的参数
Jan 06 Python
从python读取sql的实例方法
Jul 21 Python
基于PyTorch中view的用法说明
Mar 03 Python
python数字图像处理之图像的批量处理
Jun 28 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php对称加密算法示例
2014/05/07 PHP
php开启openssl的方法
2014/05/15 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
python下载图片实现方法(超简单)
2017/07/21 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python实现自动发送邮件
2018/06/20 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
在python中画正态分布图像的实例
2019/07/08 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python实现像awk一样分割字符串
2020/09/15 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
自我鉴定模板
2013/10/29 职场文书
财务部经理岗位职责
2014/02/03 职场文书
小学生开学感言
2014/02/28 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
高中班级口号
2014/06/09 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
模范教师事迹材料
2014/12/16 职场文书
2015年班组工作总结
2015/04/20 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书