python中實現php的var dump函式功能

2022-10-04 23:33:22 字數 1741 閱讀 9126

最近在做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 "", line 1, in

typeerror: vars() argument must h**e __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

這是使用方式:

複製** **如下:

cwww.cppcns.comlass stdclass(object): pass

obj=stdclass()

obj.int=1

obj.tup=(1,2,3,4)

obj.dict=}

obj.list=[1,2,3,'a','b',程式設計客棧'c',[1,2,3,4]]

obj.subobj=stdclass()

obj.subobj.value='foobar'

fromwww.cppcns.com pprint import pprint

pprint(dump(obj))

最後輸出是:

複製** **如下:

}, 'int': 1,

'list': [1, 2, 3, 'a', 'b', 'c', [1, 2, 3, 4]],

'subobj': ,

'tup': (1, 2, 3, 4)}   

然後github有個開源的module,可以參考:http程式設計客棧s:

本文標題: python中實現php的var_dump函式功能

本文位址:

PHP中的實現AbstractFactory模式

php 資料庫連線抽象工廠 filename iabstractfactory.php inte ce iabstractfactory php filename connectionfactory.php require once iabstractfactory.php require once...

PHP中的CGI實現

php的cgi實現本質是是以socket程式設計實現乙個tcp或udp協議的伺服器,當啟動時,建立tcp udp協議的伺服器的socket監聽,並接收相關請求進行處理。這只是請求的處理,在此基礎上新增模組初始化,sapi初始化,模組關閉,sapi關閉等就構成了整個cgi的生命週期。以tcp為例,在t...

c 中的實現php中的preg replace

把php preg replace 用c 重寫了一下。php函式preg replace 原型 mixed pre mixed pattern,mixed replacement,mixed subject int limit php函式preg replace 較c的功能更加強大。其前三個引數均可...