python输出文本和值_有没有Python中的函数来打印一个对象的所有当前的属性和值...

2014-12-01 回答

1. 你是两个不同的事情真的混在一起。 使用dir()或inspect模块让你有兴趣(什么__builtins__作为一个例子,你的任何对象,而不是)。 >>> l = dir(__builtins__) >>> d = __builtins__.__dict__ 打印该字典但是看上你喜欢: >>> print l ['arithmeticerror', 'assertionerror', 'attributeerror',... 或 >>> from pprint import pprint >>> pprint(l) ['arithmeticerror', 'assertionerror', 'attributeerror', 'baseexception', 'deprecationwarning', ... >>> pprint(d, indent=2) { 'arithmeticerror': , 'assertionerror': , 'attributeerror': , ... '_': [ 'arithmeticerror', 'assertionerror', 'attributeerror', 'baseexception', 'deprecationwarning', ... 2. 你想瓦尔()与pprint混合: from pprint import pprint pprint (vars(your_object)) 3. def dump(obj): for attr in dir(obj): print "obj.%s = %s" % (attr, getattr(obj, attr)) 4. 目录有但只会给你的属性'如果你希望自己的价值观,以及尝试的__dict__。 class o: def __init__ (self): self.value = 3 o = o() >>> o.__dict__ {'值':3} 5. 你的“目录()”函数来做到这一点。 >>> import sys >>> dir(sys) ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder , 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info' 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_ ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit , 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption ', 'winver'] >>> 函数是帮助。 >>> help(sys) help on built-in module sys: name sys file (built-in) module docs codego.net description this module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter. dynamic objects: argv -- command line arguments; argv[0] is the script pathname if known 6. 要打印的对象,你可能的当前状态: >>> obj # in an interpreter 或 print repr(obj) # in a script 或 print obj 为你的类定义__str__或__repr__方法。从python__repr__(self)由被叫repr()内置函数和字符串 转换(反引号) 计算“官方”的字符串 一个对象的表示。如果在所有 可能的话,这应该看起来像一个 有效的python表达式,可能是 用于重新创建的对象与 值(给定一个适当的 如果这是不可能的 codego.net, 一个字符串表单的“<...有用 描述...>“应该返回。 返回值必须是一个字符串 对象。如果一个类定义再版() 但不__str__(),然后__repr__()是 当一个“非正式”的字符串 的该实例的代表性 类是必需的。这通常是 用于调试,所以重要的是 该项表示是 信息丰富,__str__(self)由被叫str()内置函数和由打印 “非正式” 一个对象的字符串表示表单。 这不同于__repr__()在这 它并不必须是一个有效的python 表达式:更方便或 简洁的表述,如 代替。返回值必须是一个 字符串对象。 7. 可能是值得一试- 是否有相当于perl的data ::自卸车一个python? 我是这样的- 需要注意的是perl有一个名为data :: dumper模块的转换对象数据返回到perl的源代码(注:它并没有转化代码回到源,而且几乎总是你不想在输出的函数)。这可持久性,但目的是为了调 试。 有许多事情标准的python pprint未能达到,尤其是刚刚停止时,看到一个对象的实例,并为您的对象的内六角指针(降序呃,这个指针是不是一大堆的方式)。因此,概括地 说,python是所有关于这个伟大的面向对象的范式,但你得到的开箱即用的工具是专为与对象比其他工作。 在perl的data :: dumper允许你控制你想有多深去,并且还检测循环链表结构(这是非常重要的)。这个过程是比较容易实现的perl的对象有超越他们的祝福没有特别的魔 法(一个普遍良好定义的线程)。 8. 在大多数情况下,使用__dict__或dir()你将会得到你想要。如果您碰巧需要更多的细节,标准库包含了inspect模块,它可以让你获得细节令人印象深刻的金额。真正的nuggests包括: 函数 类层次结构 的一个函数/类对象的源代码 局部变量出对象的 如果你只是寻找“没有我的对象有什么属性值?”,然后dir()和__dict__可能是足够的。如果你真的希望挖掘到任意对象的当前状态(牢记在python几乎一切都是对象),然后inspect是值得考虑的。 9. 例如转储对象的魔法: $猫dump.py #!/usr/bin/python import sys if len(sys.argv) > 2: module, metaklass = sys.argv[1:3] m = __import__(module, globals(), locals(), [metaklass]) __metaclass__ = getattr(m, metaklass) class data: def __init__(self): self.num = 38 self.lst = ['a','b','c'] self.str = 'spam' dumps = lambda self: repr(self) __str__ = lambda self: self.dumps() data = data() print data 无 $pythondump.py <__main__.data instance at 0x00a052d8> 与灵知utils的: $pythondump.py gnosis.magic metaxmlpickler <?xml version="1.0"?> 这是一个有点过时,但仍然坚持工作。 10. pprint包含一个“漂亮的打印机”为你制造数据结构的美观交涉。格式化器产生的数据结构的表示,可以正确地由解释器进行解析,并且也很容易对一个人的阅读。输出保持在一行上,如果可能的话,与缩进时,多行拆分。 11. 为什么不能简单的: 关键,在obj的值。字典iteritems()。: 打印键,值 12. 我需要在日志中打印并无法pprint它会打破它。相反,我这样做,并几乎得到了的东西。 do = demoobject() itemdir = do.__dict__ for i in itemdir: print '{0} : {1}'.format(i, itemdir[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值