在PHP中调试时,我经常发现在代码中插入var_dump()来显示变量是什么、它的值是什么以及它所包含的任何内容是很有用的。
Python中与之对应的是什么?
在PHP中调试时,我经常发现在代码中插入var_dump()来显示变量是什么、它的值是什么以及它所包含的任何内容是很有用的。
Python中与之对应的是什么?
当前回答
老话题了,但值得一试。
下面是一个简单有效的var_dump函数:
def var_dump(var, prefix=''):
"""
You know you're a php developer when the first thing you ask for
when learning a new language is 'Where's var_dump?????'
"""
my_type = '[' + var.__class__.__name__ + '(' + str(len(var)) + ')]:'
print(prefix, my_type, sep='')
prefix += ' '
for i in var:
if type(i) in (list, tuple, dict, set):
var_dump(i, prefix)
else:
if isinstance(var, dict):
print(prefix, i, ': (', var[i].__class__.__name__, ') ', var[i], sep='')
else:
print(prefix, '(', i.__class__.__name__, ') ', i, sep='')
样例输出:
>>> var_dump(zen)
[list(9)]:
(str) hello
(int) 3
(int) 43
(int) 2
(str) goodbye
[list(3)]:
(str) hey
(str) oh
[tuple(3)]:
(str) jij
(str) llll
(str) iojfi
(str) call
(str) me
[list(7)]:
(str) coucou
[dict(2)]:
oKey: (str) oValue
key: (str) value
(str) this
[list(4)]:
(str) a
(str) new
(str) nested
(str) list
其他回答
我没有PHP经验,但我了解Python标准库。
出于你的目的,Python有几个方法:
日志记录模块;
对象序列化模块,称为pickle。你可以自己编写pickle模块的包装器。
如果你使用var_dump进行测试,Python有自己的doctest和unittest模块。它的设计非常简单和快速。
我认为最好的等效PHP的var_dump($foo, $bar)是结合打印与vars:
print vars(foo),vars(bar)
老话题了,但值得一试。
下面是一个简单有效的var_dump函数:
def var_dump(var, prefix=''):
"""
You know you're a php developer when the first thing you ask for
when learning a new language is 'Where's var_dump?????'
"""
my_type = '[' + var.__class__.__name__ + '(' + str(len(var)) + ')]:'
print(prefix, my_type, sep='')
prefix += ' '
for i in var:
if type(i) in (list, tuple, dict, set):
var_dump(i, prefix)
else:
if isinstance(var, dict):
print(prefix, i, ': (', var[i].__class__.__name__, ') ', var[i], sep='')
else:
print(prefix, '(', i.__class__.__name__, ') ', i, sep='')
样例输出:
>>> var_dump(zen)
[list(9)]:
(str) hello
(int) 3
(int) 43
(int) 2
(str) goodbye
[list(3)]:
(str) hey
(str) oh
[tuple(3)]:
(str) jij
(str) llll
(str) iojfi
(str) call
(str) me
[list(7)]:
(str) coucou
[dict(2)]:
oKey: (str) oValue
key: (str) value
(str) this
[list(4)]:
(str) a
(str) new
(str) nested
(str) list
要很好地显示值,可以使用pprint模块。使用它转储所有变量的最简单方法是执行
from pprint import pprint
pprint(globals())
pprint(locals())
如果在CGI中运行,一个有用的调试特性是cgitb模块,它将局部变量的值作为回溯的一部分显示出来。
打印
对于你自己的类,只需要定义一个__str__方法