寻找比“dir”更好的数据检查员

时间:2012-01-06 23:40:32

标签: python

  

可能重复:
  Is there a function in Python to print all the current properties and values of an object?

在交互式python会话中,我大量使用dir函数来了解对象的结构。不幸的是,dir只显示属性的名称,而不是它们的值,所以它没有尽可能多的信息。此外,dir的打印输出不会尝试格式化输出以便于阅读(IOW:dir 不要做stinkin'漂亮打印)。< / p>

  

在哪里可以找到“现成的”数据检查实用程序,它提供更多信息,格式更好,dir

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

>>> 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)'
>>> 

答案 1 :(得分:1)

查看pprint

from pprint import pprint
pprint(object_you_want_to_see)

答案 2 :(得分:1)

如果&#34;对象的结构&#34; ,则表示对象的实例属性,请注意dir (某事物)< / strong>如果存在名称为__dir()__的用户定义方法,则调用某事__dir__(),否则会检查某事__dict__以及某事的类型(我猜它会调用类型__dir__()或检查类型&#39; s __dict__

因此我相信对象的实例属性由其__dict__属性给出。

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

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

由于你要求格式化输出,我用cPickle给出了这个例子(模块是一个对象,就像Python中的所有内容一样)

import cPickle

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

结果

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()功能,可以显示您要搜索的文档。