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 相关文章推荐
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
创建Django项目图文实例详解
Jun 06 Python
python实现两个文件夹的同步
Aug 29 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
python之列表推导式的用法
Nov 29 Python
用Python绘制漫步图实例讲解
Feb 26 Python
Python实现动态循环输出文字功能
May 07 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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/04/24 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
JavaScript File分段上传
2016/03/10 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python 互换字典的键值对实例
2019/02/12 Python
python Tkinter版学生管理系统
2019/02/20 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
如何通过命令行进入python
2020/07/06 Python
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
土木工程实习生自我鉴定
2013/09/19 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
文明餐桌活动方案
2014/02/11 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
车间统计员岗位职责
2015/04/14 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
浅谈Redis中的RDB快照
2021/06/29 Redis