python中实现php的var_dump函数功能

作者:junjie 时间:2023-11-16 07:11:04 

最近在做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://www.aspxhome.com/article/60143.htm

标签:python,php,var,dump
0
投稿

猜你喜欢

  • python实现剪贴板的操作

    2021-09-06 08:46:16
  • Go语言基于HTTP的内存缓存服务的实现

    2024-05-21 10:25:12
  • 5个款MySQL常用维护管理工具

    2010-10-25 19:45:00
  • Python 删除连续出现的指定字符的实例

    2023-11-21 08:36:15
  • 详细分析Python collections工具库

    2022-06-28 01:18:57
  • Python 中面向接口编程详情

    2022-05-06 19:55:41
  • 查看ASP详细错误提示信息的图文设置方法

    2011-02-05 11:02:00
  • python得到windows自启动列表的方法

    2023-12-18 14:49:13
  • Python装饰器简单用法实例小结

    2022-01-18 22:19:40
  • 对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解

    2022-07-17 02:28:27
  • pytorch 图像预处理之减去均值,除以方差的实例

    2022-04-20 13:43:45
  • Vue组件的继承用法示例详解

    2024-05-29 22:44:22
  • 使用Python读写及压缩和解压缩文件的示例

    2023-08-30 17:42:52
  • Python djanjo之csrf防跨站攻击实验过程

    2021-12-31 04:53:03
  • vue中控制mock在开发环境使用,在生产环境禁用方式

    2024-05-21 10:15:06
  • 仿天涯底部固定漂浮导航,无JS纯CSS定义

    2009-07-06 12:44:00
  • sqlserver exists,not exists的用法

    2024-01-22 02:13:26
  • 让ASP也支持动态include文件

    2008-05-08 13:00:00
  • Python Numpy教程之排序,搜索和计数详解

    2021-10-31 05:30:21
  • python机器基础逻辑回归与非监督学习

    2023-03-17 03:59:05
  • asp之家 网络编程 m.aspxhome.com