为什么 Python 解释器使用repr()打印表达式?
repr()
例如:
>>> S = "First line.\nSecond line." >>> S 'First line.\nSecond line.'
当然我可以str()通过打印语句触发:
str()
>>> print S First line. Second line.
但为什么str()在交互模式下默认不触发呢?从很多方面来看,这似乎是一个更好的选择。
str()用于“漂亮的打印”,但在 Python 解释器中,您更可能需要背景信息,例如对象的 id、它是什么类等(理论上),并且repr()用于此。如果运行pydoc __builtin__.repr,它会说“对于大多数对象类型,eval(repr(object)) == object。” 有些类型完全不同,但其__str__方法返回相同的东西。例如,str(str(some_object))与相同str(same_object),所以如果我有一个列表,,[0, 4, 5]并且我用打印它str,我会得到[0, 4, 5]。如果我str(mylist)用打印str(),我仍然会得到,[0, 4, 5]即使它们是不同的类型。repr()但是,用str(mylist)会被打印为'[0, 4, 5]'这更有可能是我想要的。使用解释器的人可能正在测试某些东西或调试某些东西,他想知道它是一个字符串,而不是真正的列表。
pydoc __builtin__.repr
__str__
str(str(some_object))
str(same_object)
[0, 4, 5]
str
str(mylist)
'[0, 4, 5]'