python中實(shí)現(xiàn)php的var_dump函數(shù)功能
最近在做python的web開(kāi)發(fā)(原諒我的多變,好東西總想都學(xué)著。。。node.js也是),不過(guò)過(guò)程中總遇到些問(wèn)題,不管是web.py還是django,開(kāi)發(fā)起來(lái)確實(shí)沒(méi)用php方便,畢竟存在的時(shí)間比較短,很多不完善的地方。
比如我在調(diào)試php中最常用的函數(shù),var_dump,在python里找不到合適的替代函數(shù)。php中var_dump是一個(gè)特別有用的函數(shù),它可以輸出任何變量的值,不管你是一個(gè)對(duì)象還是一個(gè)數(shù)組,或者只是一個(gè)數(shù)。它總能用友好的方式輸出,我調(diào)試的時(shí)候經(jīng)常會(huì)需要看某位置的變量信息,調(diào)用它就很方便:

但是開(kāi)發(fā)python的時(shí)候就沒(méi)有太好的替代方案。
之前想到repr,但這個(gè)函數(shù)只是調(diào)用了對(duì)象中的__str__,和直接print obj沒(méi)啥區(qū)別。print是打印它,而repr是將其作為值返回。如果對(duì)象所屬的類沒(méi)有定義__str__這個(gè)函數(shù),那么返回的就會(huì)是難看的一串字符。
后來(lái)又想到了vars 函數(shù),vars函數(shù)是python的內(nèi)建函數(shù),專門用來(lái)輸出一個(gè)對(duì)象的內(nèi)部信息。但這個(gè)對(duì)象所屬的類中必須有__dict__函數(shù)。一般的類都有這個(gè)dict,但像[]和{}等對(duì)象就不存在這個(gè)dict,這樣調(diào)用vars函數(shù)就會(huì)拋出一個(gè)異常:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute
所以后來(lái)幾經(jīng)尋找,找到一個(gè)個(gè)比較好,功能能夠與var_dump類似的函數(shù)如下:
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有個(gè)開(kāi)源的module,可以參考:https://github.com/sha256/python-var-dump
說(shuō)一下pprint這個(gè)函數(shù),他是一個(gè)人性化輸出的函數(shù),會(huì)將要輸出的內(nèi)容用程序員喜歡的方式輸出在屏幕上。參閱這篇文章比較好理解:http://www.dhdzp.com/article/60143.htm
相關(guān)文章
Python區(qū)塊鏈創(chuàng)世塊創(chuàng)建教程
這篇文章主要為大家介紹了Python區(qū)塊鏈創(chuàng)世塊創(chuàng)建教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作精確分詞
本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,帶大家開(kāi)啟一段學(xué)習(xí)自然語(yǔ)言處理 (NLP) 的旅程. 本文主要學(xué)習(xí)NLP自然語(yǔ)言處理基本操作之如何精確分詞2021-09-09
Django生成數(shù)據(jù)庫(kù)及添加用戶報(bào)錯(cuò)解決方案
這篇文章主要介紹了Django生成數(shù)據(jù)庫(kù)及添加用戶報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Python 解決OPEN讀文件報(bào)錯(cuò) ,路徑以及r的問(wèn)題
今天小編就為大家分享一篇Python 解決OPEN讀文件報(bào)錯(cuò) ,路徑以及r的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理Word2vec電影影評(píng)建模
本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,帶大家開(kāi)啟一段學(xué)習(xí)自然語(yǔ)言處理 (NLP) 的旅程. 本篇文章主要學(xué)習(xí)NLP自然語(yǔ)言處理基本操作Word2vec電影影評(píng)建模2021-09-09
django數(shù)據(jù)模型(Model)的字段類型解析
這篇文章主要介紹了django數(shù)據(jù)模型(Model)的字段類型,文中給大家提到了django數(shù)據(jù)模型on_delete, db_constraint的使用,需要的朋友可以參考下2019-12-12

