python中实现php的var_dump函数功能


Posted in Python onJanuary 21, 2015

最近在做python的web开发(原谅我的多变,好东西总想都学着。。。node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方。

比如我在调试php中最常用的函数,var_dump,在python里找不到合适的替代函数。php中var_dump是一个特别有用的函数,它可以输出任何变量的值,不管你是一个对象还是一个数组,或者只是一个数。它总能用友好的方式输出,我调试的时候经常会需要看某位置的变量信息,调用它就很方便:

python中实现php的var_dump函数功能

但是开发python的时候就没有太好的替代方案。

之前想到repr,但这个函数只是调用了对象中的__str__,和直接print obj没啥区别。print是打印它,而repr是将其作为值返回。如果对象所属的类没有定义__str__这个函数,那么返回的就会是难看的一串字符。

后来又想到了vars 函数,vars函数是python的内建函数,专门用来输出一个对象的内部信息。但这个对象所属的类中必须有__dict__函数。一般的类都有这个dict,但像[]和{}等对象就不存在这个dict,这样调用vars函数就会抛出一个异常:

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: vars() argument must have __dict__ attribute

所以后来几经寻找,找到一个个比较好,功能能够与var_dump类似的函数如下:

def dump(obj):

  '''return a printable representation of an object for debugging'''

  newobj=obj

  if '__dict__' in dir(obj):

    newobj=obj.__dict__

    if ' object at ' in str(obj) and not newobj.has_key('__type__'):

      newobj['__type__']=str(obj)

    for attr in newobj:

      newobj[attr]=dump(newobj[attr])

  return newobj

这是使用方式:

 class stdClass(object): pass

obj=stdClass()

obj.int=1

obj.tup=(1,2,3,4)

obj.dict={'a':1,'b':2, 'c':3, 'more':{'z':26,'y':25}}

obj.list=[1,2,3,'a','b','c',[1,2,3,4]]

obj.subObj=stdClass()

obj.subObj.value='foobar'
from pprint import pprint

pprint(dump(obj))

最后输出是:

{'__type__': '<__main__.stdClass object at 0x2b126000b890>',

 'dict': {'a': 1, 'c': 3, 'b': 2, 'more': {'y': 25, 'z': 26}},

 'int': 1,

 'list': [1, 2, 3, 'a', 'b', 'c', [1, 2, 3, 4]],

 'subObj': {'__type__': '<__main__.stdClass object at 0x2b126000b8d0>',

            'value': 'foobar'},

 'tup': (1, 2, 3, 4)}   

然后github有个开源的module,可以参考:https://github.com/sha256/python-var-dump

说一下pprint这个函数,他是一个人性化输出的函数,会将要输出的内容用程序员喜欢的方式输出在屏幕上。参阅这篇文章比较好理解:https://3water.com/article/60143.htm

Python 相关文章推荐
Python制作CSDN免积分下载器
Mar 10 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python selenium如何设置等待时间
Sep 15 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Python中利用xpath解析HTML的方法
May 14 Python
python实现汽车管理系统
Nov 30 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
对python周期性定时器的示例详解
Feb 19 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Tensorflow限制CPU个数实例
Feb 06 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
Python实现获取网站PR及百度权重
Jan 21 #Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 #Python
Python中多线程及程序锁浅析
Jan 21 #Python
Python实现的多线程端口扫描工具分享
Jan 21 #Python
Python中的pprint折腾记
Jan 21 #Python
通过C++学习Python
Jan 20 #Python
python入门之语句(if语句、while语句、for语句)
Jan 19 #Python
You might like
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
python安装以及IDE的配置教程
2015/04/29 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python模块搜索路径代码详解
2018/01/29 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
Python用Jira库来操作Jira
2020/12/28 Python
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
Linux文件系统类型
2012/02/15 面试题
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
团日活动总结书格式
2014/05/08 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
运动与健康自我评价
2015/03/09 职场文书