小能豆

Python 解释器中的 `>>> some_object` 和 `>>> print some_object` 有什么区别?

py

在解释器中,您只需在解释器提示符下写下对象的名称(例如列表),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 在这两种情况下的行为差异?


阅读 5

收藏
2024-10-28

共1个答案

小能豆

在 Python 中,使用和简单评估对象(比如在交互式解释器中输入其名称)之间的行为差异print归结为这两个操作如何处理对象表示。

交互式解释器 ( >>> h5file)

当您在解释器中输入对象名称时,Python 会调用该对象的__repr__方法。目的是__repr__提供对象的“官方”字符串表示,理想情况下,如果将其反馈到解释器中,该字符串表示可用于重新创建对象。这种表示通常更详细、信息量更大,尤其是对于像 HDF5 文件这样的复杂对象。

print陈述 (print(h5file)

当您使用 时print(),Python 会调用对象的__str__方法(如果已定义)。该__str__方法旨在提供对象的“良好”或用户友好的字符串表示,这通常比 的输出更简单或更简洁__repr__

HDF5 文件示例

对于tables.openFile对象,__repr__输出可能会显示有关文件的详细信息,包括其结构、属性和数据类型,而输出__str__可能会提供更简单的摘要。这就是为什么您看到print(h5file)h5file在解释器中输入不同的输出的原因。

概括

  • __repr__:用于调试和开发;更详细、信息量更大。只需输入对象的名称即可调用。
  • __str__:用于向最终用户展示;通常更简洁明了。使用 时调用print()

您可以通过直接检查__repr____str__输出来验证这种差异:

print(h5file.__repr__())
print(h5file.__str__())

了解这些区别有助于您根据需要选择正确的方法来显示对象,无论是用于调试还是用户友好的输出。

2024-10-28