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 splitlines使用技巧
Sep 06 Python
Python语言编写电脑时间自动同步小工具
Mar 08 Python
centos系统升级python 2.7.3
Jul 03 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
pandas取出重复数据的方法
Jul 04 Python
Python如何使用OS模块调用cmd
Feb 27 Python
python 利用toapi库自动生成api
Oct 19 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 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
第九节--绑定
2006/11/16 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
JavaScript触发器详解
2007/03/10 Javascript
js可突破windows弹退效果代码
2008/08/09 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
js实现日历的简单算法
2017/01/24 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
python3去掉string中的标点符号方法
2019/01/22 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
Python的collections模块真的很好用
2021/03/01 Python
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
高中生的自我评价
2014/03/04 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
python百行代码实现汉服圈图片爬取
2021/11/23 Python