str()函数和repr()函数都是将任意数据类型转换为字符类型,但是它们之间又有一些区别,网上以及一些书籍上大多数都是这样描述:
函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。
或者是:
str()函数得到的字符串可读性好,而repr()函数得到的字符串通常可以用来重新获得该对象。通常情况下obj==eval(repr(obj))这个等式是成立的。
事实上到目前为止我并不清楚repr()函数有什么特别的用途,但还是根据自己的理解写下以下笔记 。
str()函数和repr()函数的使用示例:
>>> str(5)
'5'
>>> repr(5)
'5'
>>> str(type(5))
"<class 'int'>"
>>> repr(type(5))
"<class 'int'>"
>>> str(5)==repr(5)
True
>>> str(type(5))==repr(type(5))
True
从上面的示例中并不能发现str()函数和repr()函数在使用上有什么区别,所以某种程度上str()函数和repr()函数的功能是有一定的重合性的。
但如果我们将一个字符串值做为参数分别带入到两个函数中,结果就会不一样。
>>> str('abc')
'abc'
>>> repr('abc')
"'abc'"
>>> str('abc')==repr('abc')
False
上面的示例中可以看出,如果使用str()函数值来转换一个字符串变量,其值并不会发生改变。但如果换成repr()函数,则repr()函数会将原来值的字符串表示中的定界符引号也转换为字符串的一个组成部分。再看下面的例子:
>>> repr("abc")
"'abc'"
>>> repr("'abc'")
'"\'abc\'"'
>>> repr('''"'abc'"''')
'\'"\\\'abc\\\'"\''
为了表达多出来的定界符,repr()函数最后使用了转义符“\”。
目前为止我只发现了str()函数和repr()函数在转换字符串时有这一点区别,其他在功能上似乎没有不同(或许是我的理解以及查阅的资料还不够全面,如有错误欢迎指正)。
再为说一下``运算符(注意这不是两个单引号,而是键盘字母键区的数字键“1”前面的那个按键),这个运算符的作者跟repr()的作用其实是一模一样的,但只在python2版本中获得支持,在Python3中已经取消了这种用法。
以下示例是在python2.7.13中进行的演示。
>>> repr('abc')
"'abc'"
>>> `'abc'`
"'abc'"
以下示例是在Python3.6.0中进行的演示。
>>> repr('abc')
"'abc'"
>>> `'abc'`
File "<stdin>", line 1
`'abc'`
^
SyntaxError: invalid syntax
参考资料
《Python核心编程》(第二版) 人民邮电出版社出版发行