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 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python 多线程实例详解
Mar 25 Python
Python 通过URL打开图片实例详解
Jun 01 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
python使用多进程的实例详解
Sep 19 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
python 日志模块logging的使用场景及示例
Jan 04 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获取文件相对路径的方法
2015/02/26 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
javascript String 对象
2008/04/25 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
UGG英国官方网站:UGG UK
2018/02/08 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
公司财务流程之主管工作流程
2014/03/03 职场文书
高三励志标语
2014/06/05 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
初中作文评语
2014/12/25 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫