python中实现php的var_dump函数功能

 更新时间:2015年01月21日 15:57:51   投稿:junjie  
这篇文章主要介绍了python中实现php的var_dump函数功能,var_dump函数在PHP中调试时非常实用,本文介绍在Python中实现这个函数,需要的朋友可以参考下

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

比如我在调试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://www.jb51.net/article/60143.htm

相关文章

  • Python区块链创世块创建教程

    Python区块链创世块创建教程

    这篇文章主要为大家介绍了Python区块链创世块创建教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python中使用psutil查看内存占用的情况

    python中使用psutil查看内存占用的情况

    今天小编就为大家分享一篇python中使用psutil查看内存占用的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python机器学习NLP自然语言处理基本操作精确分词

    Python机器学习NLP自然语言处理基本操作精确分词

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程. 本文主要学习NLP自然语言处理基本操作之如何精确分词
    2021-09-09
  • Django生成数据库及添加用户报错解决方案

    Django生成数据库及添加用户报错解决方案

    这篇文章主要介绍了Django生成数据库及添加用户报错解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python如何转换字符串大小写

    Python如何转换字符串大小写

    在本篇文章里小编给大家整理的是关于Python转换字符串大小写代码和实例,需要的朋友们可以参考下。
    2020-06-06
  • Python 解决OPEN读文件报错 ,路径以及r的问题

    Python 解决OPEN读文件报错 ,路径以及r的问题

    今天小编就为大家分享一篇Python 解决OPEN读文件报错 ,路径以及r的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 基于Python制作天眼查小程序的示例代码

    基于Python制作天眼查小程序的示例代码

    本文主要介绍了如何利用Python制作一个天眼查GUI程序。这次的GUI程序,我们使用的框架是PyQt5,该框架拥有比tkinter更为丰富的内置组件,在界面美化方面,貌似也更胜一筹,快跟随小编一起学起来吧
    2022-09-09
  • Python机器学习NLP自然语言处理Word2vec电影影评建模

    Python机器学习NLP自然语言处理Word2vec电影影评建模

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程. 本篇文章主要学习NLP自然语言处理基本操作Word2vec电影影评建模
    2021-09-09
  • Python读取stdin方法实例

    Python读取stdin方法实例

    在本篇文章中小编给大家分享了关于Python里如何读取stdin的知识点以及相关实例内容,需要的朋友们学习参考下。
    2019-05-05
  • django数据模型(Model)的字段类型解析

    django数据模型(Model)的字段类型解析

    这篇文章主要介绍了django数据模型(Model)的字段类型,文中给大家提到了django数据模型on_delete, db_constraint的使用,需要的朋友可以参考下
    2019-12-12

最新评论