Python中str()和repr()函数的区别

在 Python 中要将某一类型的变量或者常量转换为字符串对象一般有两种方法,即 str() 或者 repr() 。python

区别与使用
函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(若是没有等价的语法,则会发生SyntaxError 异常), 适合开发和调试阶段使用。 函数

>>> number = 123456789
>>> type(str(number))
<class 'str'>
>>> type(repr(number))
<class 'str'>
>>> print(repr(number))
123456789
>>> print(str(number))
123456789

两个函数返回的类型是相同的,值也是相同的。调试

>>> print(str('123456789'))
123456789
>>> print(repr('123456789'))
'123456789'

但当咱们把一个字符串传给 str() 函数再打印到终端的时候,输出的字符不带引号。而将一个字符串传给 repr() 函数再打印到终端的时候,输出的字符带有引号。对象

形成这两种输出形式不一样的缘由在于:blog

print 语句结合 str() 函数其实是调用了对象的 __str__ 方法来输出结果。而 print 结合 repr() 其实是调用对象的 __repr__ 方法输出结果。下例中咱们用 str 对象直接调用这两个方法,输出结果的形式与前一个例子保持一致。开发

>>> print('123456789'.__repr__())
'123456789'
>>> print('123456789'.__str__())
123456789

 

不一样数据类型的不一样处理
某对象没有适于人阅读的解释形式的话, str() 会返回与repr()等同的值。不少类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的处理方式。字符串

代码实例:string

>>> listA = [1,2,3]
>>> str(listA)
'[1, 2, 3]'
>>> repr(listA)
'[1, 2, 3]'
>>>

 

结果是相同的。
而字符串和浮点数,它们的处理方式不一样。
注意:Python3和Python2版本str函数处理浮点数时是不一样的,Python3版本下,str和repr会返回相同的结果,Python2下则不会, 具体看下面的例子:class

Python3版本:变量

>>> string = 'Hello, PythonTab.com'
>>> str(string)
'Hello, PythonTab.com'
>>> repr(string)
"'Hello, PythonTab.com'"
>>> 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'
相关文章
相关标签/搜索