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中使用pngquant压缩png图片的教程
Apr 09 Python
浅析python中的分片与截断序列
Aug 09 Python
详解django.contirb.auth-认证
Jul 16 Python
python散点图实例之随机漫步
Aug 27 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
Python自定义一个异常类的方法
Jun 27 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
如何基于python实现画不同品种的樱花树
Jan 03 Python
python怎么提高计算速度
Jun 11 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
Python Pandas 删除列操作
Mar 16 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
python之随机数函数的实现示例
2020/12/30 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
怎样声明子类
2013/07/02 面试题
社会保险接收函
2014/01/12 职场文书
考核工作实施方案
2014/03/30 职场文书
购房意向书范本
2014/04/01 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
开网店计划分析
2019/07/30 职场文书
导游词之日月潭
2019/11/05 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android