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中的变量及其命名和打印
Mar 11 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
Python WSGI的深入理解
Aug 01 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
Python理解递归的方法总结
Jan 28 Python
Django实现单用户登录的方法示例
Mar 28 Python
详解python中递归函数
Apr 16 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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中eclipse 用空格替换 tab键
2013/06/24 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
详解python之配置日志的几种方式
2017/05/22 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Django之模板层的实现代码
2019/09/09 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
大学生心理活动总结
2014/07/04 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
python四种出行路线规划的实现
2021/06/23 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技