我正在使用Google环境中的用户对象,并尝试了以下操作:
pprint(user)
print vars(user)结果:
pprint(用户)
users.User(email='test@example.com',_user_id='18580000000000')打印vars(用户)
{'_User__federated_identity': None, '_User__auth_domain': 'gmail.com',
'_User__email': 'test@example.com', '_User__user_id': '1858000000000',
'_User__federated_provider': None}这里有几个问题(为多个部分感到抱歉):
auth_domain,哪个值?发布于 2011-11-17 14:30:29
pprint正在打印实例的repr,而vars只是返回实例的__dict__,然后打印它的__dict__。下面是一个例子:
>>> class Foo(object):
... def __init__(self, a, b):
... self.a = a
... self.b = b
... def __repr__(self):
... return 'Foo(a=%s)' % self.a
...
>>> f = Foo(a=1, b=2)
>>> vars(f)
{'a': 1, 'b': 2}
>>> pprint.pprint(f)
Foo(a=1)
>>> vars(f) is f.__dict__
True您可以看到这里的特殊方法__repr__ (由pprint()、print语句、repr()和其他方法调用)只显式地包含a成员,而实例的__dict__同时包含a和b,并且由vars()返回的字典反映出来。
发布于 2014-03-27 20:22:39
在这类对象打印转储中,有几种方法可以获得不同的换行符。
样本数据:
d = dict(a=1, b=2, c=dict(d=3, e=[4, 5, 6], f=dict(g=7)), h=[8,9,10])没有友好间隔的标准打印:
>>> print d
{'a': 1, 'h': [8, 9, 10], 'c': {'e': [4, 5, 6], 'd': 3, 'f': {'g': 7}}, 'b': 2}有两种可能的解决办法:
(1)将pprint与width=1结合使用时,每行为您提供一个叶节点,但每行可能>1个键:
>>> import pprint
>>> pprint.pprint(d, width=1)
{'a': 1,
'b': 2,
'c': {'d': 3,
'e': [4,
5,
6],
'f': {'g': 7}},
'h': [8,
9,
10]}(2)使用json.dumps时,每行最多有一个键,但有些行只有一个结束括号:
>>> import json
>>> print json.dumps(d, indent=4)
{
"a": 1,
"h": [
8,
9,
10
],
"c": {
"e": [
4,
5,
6
],
"d": 3,
"f": {
"g": 7
}
},
"b": 2
}发布于 2012-06-07 22:26:00
关于问题3,“是否有办法使pprint在属性之间中断行?”:
Python文档对此进行了描述:
如果可能的话,格式化表示将对象保持在一行上,如果对象不符合允许的宽度,则将其拆分为多行。
属性“宽度”(在init中可通过)是您指定允许的内容的地方。我将我的设置设置为width=1,这似乎起了作用。
例如:
pretty = pprint.PrettyPrinter(indent=2)结果..。
{ 'acbdf': { 'abdf': { 'c': { }}, 'cbdf': { 'bdf': { 'c': { }}, 'cbd': { }}},
'cef': { 'abd': { }}}鉴于
pretty = pprint.PrettyPrinter(indent=2,width=1)结果..。
{ 'acbdf': { 'abdf': { 'c': { }},
'cbdf': { 'bdf': { 'c': { }},
'cbd': { }}},
'cef': { 'abd': { }}}希望这能有所帮助。
https://stackoverflow.com/questions/8168654
复制相似问题