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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
开始着手第一个Django项目
Jul 15 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
python递归实现快速排序
Aug 18 Python
解决python中无法自动补全代码的问题
Dec 04 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
Python 支持向量机分类器的实现
Jan 15 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
python Tornado框架的使用示例
Oct 19 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/10/03 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python读写文件基础知识点
2019/06/10 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
python实现简单俄罗斯方块
2020/03/13 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python开发一款翻译工具
2020/10/10 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
.net面试题
2015/12/22 面试题
解放思想大讨论活动心得体会
2014/09/11 职场文书
大学生毕业评语
2014/12/31 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书