最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中實(shí)現(xiàn)php的var_dump函數(shù)功能

 更新時(shí)間:2015年01月21日 15:57:51   投稿:junjie  
這篇文章主要介紹了python中實(shí)現(xiàn)php的var_dump函數(shù)功能,var_dump函數(shù)在PHP中調(diào)試時(shí)非常實(shí)用,本文介紹在Python中實(shí)現(xiàn)這個函數(shù),需要的朋友可以參考下

最近在做python的web開發(fā)(原諒我的多變,好東西總想都學(xué)著。。。node.js也是),不過過程中總遇到些問題,不管是web.py還是django,開發(fā)起來確實(shí)沒用php方便,畢竟存在的時(shí)間比較短,很多不完善的地方。

比如我在調(diào)試php中最常用的函數(shù),var_dump,在python里找不到合適的替代函數(shù)。php中var_dump是一個特別有用的函數(shù),它可以輸出任何變量的值,不管你是一個對象還是一個數(shù)組,或者只是一個數(shù)。它總能用友好的方式輸出,我調(diào)試的時(shí)候經(jīng)常會需要看某位置的變量信息,調(diào)用它就很方便:

但是開發(fā)python的時(shí)候就沒有太好的替代方案。

之前想到repr,但這個函數(shù)只是調(diào)用了對象中的__str__,和直接print obj沒啥區(qū)別。print是打印它,而repr是將其作為值返回。如果對象所屬的類沒有定義__str__這個函數(shù),那么返回的就會是難看的一串字符。

后來又想到了vars 函數(shù),vars函數(shù)是python的內(nèi)建函數(shù),專門用來輸出一個對象的內(nèi)部信息。但這個對象所屬的類中必須有__dict__函數(shù)。一般的類都有這個dict,但像[]和{}等對象就不存在這個dict,這樣調(diào)用vars函數(shù)就會拋出一個異常:

復(fù)制代碼 代碼如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute

所以后來幾經(jīng)尋找,找到一個個比較好,功能能夠與var_dump類似的函數(shù)如下:

復(fù)制代碼 代碼如下:

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

這是使用方式:

復(fù)制代碼 代碼如下:

 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))

最后輸出是:

復(fù)制代碼 代碼如下:

{'__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這個函數(shù),他是一個人性化輸出的函數(shù),會將要輸出的內(nèi)容用程序員喜歡的方式輸出在屏幕上。參閱這篇文章比較好理解:http://m.fzitv.net/article/60143.htm

相關(guān)文章

最新評論

远安县| 洛川县| 泌阳县| 宁陵县| 浦城县| 平潭县| 德昌县| 平安县| 漳州市| 务川| 叶城县| 焉耆| 泰安市| 大城县| 和静县| 峨边| 霍州市| 什邡市| 嘉鱼县| 容城县| 独山县| 乐平市| 彭山县| 北川| 金乡县| 台东县| 罗平县| 栾川县| 乐山市| 电白县| 德格县| 梁河县| 天柱县| 斗六市| 宁远县| 巩义市| 藁城市| 玉屏| 恩平市| 江西省| 襄城县|