在解释器中,您只需在解释器提示符下写下对象的名称(例如列表),a = [1, 2, 3, u"hellö"]如下所示:
a = [1, 2, 3, u"hellö"]
>>> a [1, 2, 3, u'hell\xf6']
或者你可以这样做:
>>> print a [1, 2, 3, u'hell\xf6']
对于列表来说,这似乎是等效的。目前,我正在使用 hdf5 来管理一些数据,我意识到上述两种方法之间存在差异。鉴于:
with tables.openFile("tutorial.h5", mode = "w", title = "Some Title") as h5file: group = h5file.createGroup("/", 'node', 'Node information') tables.table = h5file.createTable(group, 'readout', Node, "Readout example")
输出
print h5file
不同于
>>> h5file
所以我想知道是否有人可以解释 Python 在这两种情况下的行为差异?
在 Python 中,使用和简单评估对象(比如在交互式解释器中输入其名称)之间的行为差异print归结为这两个操作如何处理对象表示。
print
当您在解释器中输入对象名称时,Python 会调用该对象的__repr__方法。目的是__repr__提供对象的“官方”字符串表示,理想情况下,如果将其反馈到解释器中,该字符串表示可用于重新创建对象。这种表示通常更详细、信息量更大,尤其是对于像 HDF5 文件这样的复杂对象。
__repr__
print(h5file)
当您使用 时print(),Python 会调用对象的__str__方法(如果已定义)。该__str__方法旨在提供对象的“良好”或用户友好的字符串表示,这通常比 的输出更简单或更简洁__repr__。
print()
__str__
对于tables.openFile对象,__repr__输出可能会显示有关文件的详细信息,包括其结构、属性和数据类型,而输出__str__可能会提供更简单的摘要。这就是为什么您看到print(h5file)与h5file在解释器中输入不同的输出的原因。
tables.openFile
h5file
您可以通过直接检查__repr__和__str__输出来验证这种差异:
print(h5file.__repr__()) print(h5file.__str__())
了解这些区别有助于您根据需要选择正确的方法来显示对象,无论是用于调试还是用户友好的输出。