python 2.7.5中的str()vs repr()函数

AnV*_*AnV 28 python string repr python-2.7

python 2.7.5 str()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
Run Code Online (Sandbox Code Playgroud)

所以我想知道以下内容

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

aba*_*ert 30

我何时应该使用str()以及何时应该使用repr()?

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

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

repr()也可用于生成文字以粘贴到源代码中.它也可以用于持久化(带ast.literal_evaleval),但这很少是一个好主意 - 如果你想要可编辑的持久化值,像JSON或YAML更好,如果你不打算编辑它们,使用pickle .

2.在哪些情况下我可以使用其中任何一种?

好了,你可以在几乎任何地方使用它们.你不应该通常使用它们作为上述除.

3.什么不能str()repr()

为最终用户消费提供输出 - 并非总是如此(例如,str(['spam','eggs'))可能不是你想要放在GUI中的任何东西,但更多的是repr().

什么不能repr()str()什么呢?

为您提供对调试有用的输出 - 再次,并非总是(用户创建的类的实例的默认值很少有用),但只要有可能.

有时候会给你输出有效的Python文字或其他表达式 - 但除了交互式探索之外,你很少依赖它.