最近在做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的功能更加強大。其前三個引數均可...