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 不关闭控制台的实现方法
Oct 23 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python greenlet实现原理和使用示例
Sep 24 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
django序列化时使用外键的真实值操作
Jul 15 Python
基于python实现复制文件并重命名
Sep 16 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
python 三边测量定位的实现代码
Apr 22 Python
Python基础 括号()[]{}的详解
Nov 07 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
php 正则 过滤html 的超链接
2009/06/02 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
常用简易JavaScript函数
2009/04/09 Javascript
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
连接Python程序与MySQL的教程
2015/04/29 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python按比例随机切分数据的实现
2019/07/11 Python
Python谱减法语音降噪实例
2019/12/18 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
2014年党员自我评价材料
2014/09/22 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
大学学生会竞选稿
2015/11/19 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技