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支持断点续传的多线程下载示例
Jan 16 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
python 统计代码行数简单实例
May 04 Python
关于python的list相关知识(推荐)
Aug 30 Python
python使用RNN实现文本分类
May 24 Python
python字典改变value值方法总结
Jun 21 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python实现调用摄像头并拍照发邮箱
Apr 27 Python
Python源码解析之List
May 21 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 var_dump()函数的详解
2013/06/05 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
python修改操作系统时间的方法
2015/05/18 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
python实现多张图片拼接成大图
2019/01/15 Python
Django实现发送邮件功能
2019/07/18 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
关于Java finally的面试题
2016/04/27 面试题
面试自我评价范文
2014/09/17 职场文书
中秋客户感谢信
2015/01/22 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题