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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
详解flask入门模板引擎
Jul 18 Python
python使用knn实现特征向量分类
Dec 26 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
Python类反射机制使用实例解析
Dec 30 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 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采集相关教程之一 CURL函数库
2010/02/15 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
为什么python比较流行
2020/06/19 Python
用python写PDF转换器的实现
2020/10/29 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
成品仓管员岗位职责
2013/12/11 职场文书
安全演讲稿大全
2014/05/09 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
初中家长评语和期望
2014/12/26 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
Python编程编写完善的命令行工具
2021/09/15 Python