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中的一些高级编程技巧
Apr 02 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
Python文件和流(实例讲解)
Sep 12 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
plt.figure()参数使用详解及运行演示
Jan 08 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 Python
利用Python实现模拟登录知乎
May 25 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
Python数据处理numpy.median的实例讲解
2018/04/02 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
简单说说tomcat的配置
2013/05/28 面试题
个人投资计划书
2014/05/01 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
门店店长岗位职责
2015/04/14 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers