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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
Python lambda表达式用法实例分析
Dec 25 Python
在python中用url_for构造URL的方法
Jul 25 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
简单介绍django提供的加密算法
Dec 18 Python
python 利用Pyinstaller打包Web项目
Oct 23 Python
OpenCV项目实践之停车场车位实时检测
Apr 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
jquery 指南/入门基础
2007/11/30 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
python安装Scrapy图文教程
2017/08/14 Python
python先序遍历二叉树问题
2017/11/10 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python创建文件备份的脚本
2018/09/11 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
python利用7z批量解压rar的实现
2019/08/07 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
python代码区分大小写吗
2020/06/17 Python
python中append函数用法讲解
2020/12/11 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
大学生四个方面的自我评价
2013/09/19 职场文书
办公室文书岗位职责
2013/12/16 职场文书
工人先进事迹材料
2014/12/26 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书