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数组的处理代码
Jan 04 Python
在Python中处理时间之clock()方法的使用
May 22 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
Python selenium抓取微博内容的示例代码
May 17 Python
python random从集合中随机选择元素的方法
Jan 23 Python
详解python中sort排序使用
Mar 23 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
Python求离散序列导数的示例
Jul 10 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Python代码中如何读取键盘录入的值
May 27 Python
使用django自带的user做外键的方法
Nov 30 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数据文件缓存类汇总
2014/12/05 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP类的封装与继承详解
2015/09/29 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Python中datetime常用时间处理方法
2015/06/15 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
python各种excel写入方式的速度对比
2020/11/10 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
软件测试常见笔试题
2012/02/04 面试题
大学生实习思想汇报
2014/01/12 职场文书
个人委托书范本
2014/04/02 职场文书
工作自我推荐信范文
2015/03/25 职场文书
安全教育主题班会教案
2015/08/12 职场文书