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()不能做什么?
- repr应返回python的"对象表示",该"对象表示"的计算结果将适用于此类对象。这就是在使用repr时引用字符串的原因:因此eval(repr(someStr)) == someStr应该是真的(它还可以很好地转义不可打印和控制字符)。它(repr和reprlib)对于调试和探索对象很有用,但一般不应用于最终用户输出。
- 查看satyajit.ranjeev.in/2012/03/14/python-repr-str.html和stackoverflow.com/questions/1436703/…
- 请注意,当您在解释器中键入str(s)时,它会打印出repr(str(s)),因为解释器会显示您键入的任何表达式的repr。你可能会发现它更具启发性。
- 请注意,在您的数字示例中,repr()可能提供了更高的精度,但不一定提供更高的精度。它确实显示了更多的数字,但是由于典型的浮点限制,str()显示的值可能更好。比较repr(sum(0.1 for i in range(9)))和str(sum(0.1 for i in range(9)))。另一方面,str()会向你隐瞒固有的不准确之处,这会让人们困惑,为什么sum(0.1 for i in range(9)) == 0.9会返回False呢?
- @我不明白为什么我的问题是重复的。我看到了你给出的链接。但是在那里,解释是用类,self给出的。我是Python的初学者。我甚至都不明白。我对功能有疑问,我解释得很清楚。那么你能重新考虑一下我的问题吗?
- 我必须同意@vnvmachinav。作为一个刚刚开始阅读Python教程的初学者,他的问题寻求答案。您提供的链接解释了更多关于类定义中str和repr的实现和意图。我…只是讨厌这个。(好吧,三年半之后,我就不该抱怨了。
When should i use str() and when should i use repr() ?
在为最终用户创建输出时,几乎总是使用str()。
repr()主要用于调试和探索。例如,如果怀疑某个字符串中有非打印字符,或者某个浮点有一个小的舍入错误,那么repr()将显示您;str()可能不显示。
repr()还可以用于生成要粘贴到源代码中的文本。它也可以用于持久性(与ast.literal_eval或eval一起使用),但这很少是一个好主意——如果您想要可编辑的持久性值,像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文本或其他表达式的输出——但除了交互式探索之外,您很少希望依赖它。
- 你说:"repr还可以用于生成文本粘贴到源代码中。"另一种方法是使用所谓的原始字符串。
- @Redjohn原始字符串文本不会做任何类似的事情。可能有一些重叠(如果你不知道如何转义一个字符串,你应该使用一个原始字符串,但是你可以使用repr来演示如何转义它),但就是这样。
- 同意。我只是在说一个相似之处。我不再要求了。例如,我在源代码中写文件名时出错,尤其是在文件名有反斜杠的窗口中。因此,我使用原始字符串,而不是使用repr()在解释器中复制粘贴正确的转义序列字符串。