关于str()和repr()函数在Python 2.7.5

str() vs repr() functions in python 2.7.5

本问题已经有最佳答案,请猛点这里访问。

在python 2.7.5中,str()repr()函数有什么区别?

关于python.org的解释:

The str() function is meant to return representations of values which are fairly human-readable, while repr() is meant to generate
representations which can be read by the interpreter (or will force a SyntaxError if there is no equivalent syntax)

但我不清楚。

一些例子:

1
2
3
4
5
6
7
8
9
>>> 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

所以我想知道以下几点

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

  • When should i use str() and when should i use repr() ?

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

    repr()主要用于调试和探索。例如,如果怀疑某个字符串中有非打印字符,或者某个浮点有一个小的舍入错误,那么repr()将显示您;str()可能不显示。

    repr()还可以用于生成要粘贴到源代码中的文本。它也可以用于持久性(与ast.literal_evaleval一起使用),但这很少是一个好主意——如果您想要可编辑的持久性值,像json或yaml这样的东西要好得多,如果您不打算编辑它们,请使用pickle。

    2.In which cases i can use either of them ?

    嗯,你几乎可以在任何地方使用它们。除上述情况外,一般不应使用它们。

    3.What can str() do which repr() can't ?

    为您提供适合最终用户消费的输出——并非总是(例如str([‘spam’,‘eggs’)不太可能是您想在GUI中放入的任何内容),但比repr()更常见。

    4.What can repr() do which str() can't

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

    有时会给您一个有效的python文本或其他表达式的输出——但除了交互式探索之外,您很少希望依赖它。