Python str与repr的区别
Admin
2019-04-29 10:36:44
Python
在Python中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或 repr() 。
函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生SyntaxError 异常), 适合开发和调试阶段使用。
也就是说 repr() 输出对 Python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这两者的输出仍然都是完全一样的。
>>> num = 123456 >>> type(str(num)) <class 'str'> >>> type(repr(num)) <class 'str'> >>> print(repr(num)) 123456 >>> print(str(num)) 123456
两个函数返回的类型是相同的,值也是相同的。
>>> print(str('123456'))
123456
>>> print(repr('123456'))
'123456'
但当我们把一个字符串传给 str() 函数再打印到终端的时候,输出的字符不带引号。而将一个字符串传给 repr() 函数再打印到终端的时候,输出的字符带有引号。
造成这两种输出形式不同的原因在于:
print 语句结合 str() 函数实际上是调用了对象的 __str__ 方法来输出结果。而 print 结合 repr() 实际上是调用对象的 __repr__ 方法输出结果。
我们用 str 对象直接调用这两个方法,输出结果与前一个例子是一样的
>>> print('123456'.__repr__()) '123456' >>> print('123456'.__str__()) 123456
如果对象没有适于阅读的解释形式的话, str() 会返回与repr()等同的值。如数值或链表、字典这样的结构
>>> lst = [1,2,3,4,5,6] >>> str(lst) '[1, 2, 3, 4, 5, 6]' >>> repr(lst) '[1, 2, 3, 4, 5, 6]'
而字符串和浮点数的处理方式不同
注意:Python3和Python2版本str函数处理浮点数时是不同的,Python3版本下,str和repr会返回相同的结果,Python2下则不会
Python3下
>>> s = 'Python' >>> str(s) 'Python' >>> repr(s) "'Python'" >>> str(1.0/7.0) '0.14285714285714285' >>> repr(1.0/7.0) '0.14285714285714285'
Python2下
>>> str(1.0/7.0) '0.142857142857' >>> repr(1.0/7.0) '0.14285714285714285'