关于python:寻找比“dir”更好的数据检查器

Looking for better data inspector than `dir`

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is there a function in Python to print all the current properties and values of an object?

在交互式Python会话中,我经常使用dir函数来了解对象的结构。不幸的是,dir只显示属性的名称,而不显示它们的值,因此它的信息量远不及它所能提供的。此外,dir的打印输出没有试图格式化输出以便于阅读(iow:dir不做臭'漂亮的打印)。

Where can I find an"off-the-shelf" data-inspection utility that is more informative, and better formatted, dir?

例如,对于dir,一个更有用的替代方法是打印与每个属性相关联的值(根据需要适当格式化),并格式化该输出以便于阅读。对于值可调用的属性,它将打印其签名和/或文档字符串的第一行。

谢谢!


尝试inspect模块,它可以为您提供各种各样的东西,包括函数的原始源代码、堆栈帧等:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>>> class Foo:
...     def __init__(self, a, b, c):
...             self.a = a
...             self.b = b
...             self.c = c
...     def foobar(self):
...             return 100
...
>>> f = Foo(50, 'abc', 2.5)
>>> import inspect
>>> inspect.getmembers(f)
[('__doc__', None), ('__init__', <bound method Foo.__init__ of <__main__.Foo instance at     0x7f0d76c440e0>>), ('__module__', '__main__'), ('a', 50), ('b', 'abc'), ('c', 2.5), ('foobar', <bound method Foo.foobar of <__main__.Foo instance at 0x7f0d76c440e0>>)]
>>>
>>> def add5(x):
...    """adds 5 to arg"""
...     return 5 + x
...
>>> inspect.getdoc(add5)
'adds 5 to arg'
>>> # What arguments does add5 take?
>>> inspect.getargspec(add5)
ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
>>> # Format that nicely...
>>> inspect.formatargspec(inspect.getargspec(add5))
'((x,), None, None, None)'
>>>

如果"对象的结构"是指对象的实例属性,请注意EDOCX1(something)调用某个对象。__dir()__如果存在名为__dir__()的用户定义方法,则它检查某个对象。__dict__和某个对象的类型(我认为它随后调用该类型的__dir__()或检查该类型的__dict__)

因此,我相信一个对象的实例属性是由它的__dict__属性给出的。

但有些对象没有实例属性,例如整数。

因此,我认为,如果你测试一个对象的__dict__属性的存在性,如果它存在,获得它的值将给你需要获得的:不仅是属性的名称,而且是这样命名的对象。

由于您要求格式化输出,所以我用cpickle给出了这个示例(模块是一个对象,与Python中的所有内容一样)。

1
2
3
4
import cPickle

for name,obj in  cPickle.__dict__.iteritems() :
    print '%-25s  -->  %r' % (name, obj)

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
load                       -->  <built-in function load>
PicklingError              -->  <class 'cPickle.PicklingError'>
__version__                -->  '1.71'
UnpickleableError          -->  <class 'cPickle.UnpickleableError'>
dump                       -->  <built-in function dump>
__builtins__               -->  <module '__builtin__' (built-in)>
Unpickler                  -->  <built-in function Unpickler>
compatible_formats         -->  ['1.0', '1.1', '1.2', '1.3', '2.0']
BadPickleGet               -->  <class 'cPickle.BadPickleGet'>
__package__                -->  None
dumps                      -->  <built-in function dumps>
UnpicklingError            -->  <class 'cPickle.UnpicklingError'>
PickleError                -->  <class 'cPickle.PickleError'>
HIGHEST_PROTOCOL           -->  2
__name__                   -->  'cPickle'
loads                      -->  <built-in function loads>
Pickler                    -->  <built-in function Pickler>
__doc__                    -->  'C implementation and optimization of the Python pickle module.'
format_version             -->  '2.0'

.

还有一个函数help(),它提供了您正在搜索的文档。


查看pprint

1
2
from pprint import pprint
pprint(object_you_want_to_see)