34

python 2.7.5str()和函数有什么区别?repr()

python.org上的解释:

str()函数旨在返回相当人类可读的值的表示形式,同时repr()旨在生成解释器可以读取的SyntaxError表示形式(或者如果没有等效的语法将强制执行)

但这对我来说并不清楚。

一些例子:

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"      # repr is giving an extra double quotes
>>> str(1.0/7.0)
'0.142857142857'
>>> repr(1.0/7.0)
'0.14285714285714285'  # repr is giving value with more precision

所以我想知道以下

  1. 我应该什么时候使用str(),什么时候应该使用repr()
  2. 在哪些情况下我可以使用它们中的任何一个?
  3. 什么str()能做什么repr()不能?
  4. 什么repr()能做什么str()不能?
4

1 回答 1

31

我应该什么时候使用 str() 什么时候应该使用 repr() ?

str()在为最终用户创建输出时几乎总是使用。

repr()主要用于调试和探索。例如,如果您怀疑字符串中包含非打印字符,或者浮点数有小舍入误差,repr()则会显示;str()不得。

repr()对于生成要粘贴到源代码中的文字也很有用。它也可以用于持久化(使用ast.literal_evalor eval),但这不是一个好主意——如果你想要可编辑的持久化值,JSON 或 YAML 之类的东西会更好,如果你不打算编辑它们,请使用 pickle .

2.在哪些情况下我可以使用它们中的任何一个?

好吧,您几乎可以在任何地方使用它们。您通常不应该使用它们,除非如上所述。

3.什么可以str()做什么repr()不能?

为您提供适合最终用户消费的输出 - 并非总是如此(例如, str(['spam', 'eggs']) 不太可能是您想要放入 GUI 的任何内容),但比repr().

4.repr()能做什么str()不能做什么

为您提供对调试有用的输出——同样,并非总是如此(用户创建的类实例的默认值很少有帮助),但只要有可能。

有时会为您提供有效的 Python 文字或其他表达式的输出——但除了交互式探索之外,您很少希望依赖它。

于 2013-10-12T07:09:04.593 回答