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

Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。

    函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。

对于数值类型、列表类型,str和repr方法的处理是一致;而对于字符串类型,str和repr方法处理方式不一样。

repr()函数得到的字符串通常可以用来重新获得该对象,repr()的输入对python比较友好,适合开发和调试阶段使用。通常情况下obj==eval(repr(obj))这个等式是成立的。

>>> obj
=
'I love Python'
>>> obj
=
=
eval
(
repr
(obj))
True

 而str()函数没有这个功能,str()函数适合print()输出

 1 >>> obj = 'I love Python'
 2 >>> obj==eval(repr(obj))
 3 True
 4 >>> obj == eval(str(obj))
 5 Traceback (most recent call last):
 6   File "<stdin>", line 1, in <module>
 7   File "<string>", line 1
 8     I love Python
 9          ^
10 SyntaxError: invalid syntax

repr()函数(python3中):

1 >>> repr([0,1,2,3])
2 '[0, 1, 2, 3]'
3 >>> repr('Hello')
4 "'Hello'"
5  
6 >>> str(1.0/7.0)
7 '0.14285714285714285'
8 >>> repr(1.0/7.0)
9 '0.14285714285714285'

对比:

1 >>> repr('hello')
2 "'hello'"
3 >>> str('hello')
4 'hello'

对于一般情况:

1 >>> a=test()
2 >>> a
3 <__main__.test object at 0x000001BB1BD228D0>
4 >>> print(a)
5 <__main__.test object at 0x000001BB1BD228D0>
6 >>> 

不管我们是输入对象还是print(对象),返回的都是对象的内存地址
对于方法__str__:

 1 >>> class test():
 2     def __str__(self):
 3         return "你好"
 4 
 5     
 6 >>> a=test()
 7 >>> a
 8 <__main__.test object at 0x000001BB1BD22860>
 9 >>> print(a)
10 你好
11 >>> 

如果我们在终端中输入对象,会返回对象的内存地址,使用print则会自动调用方法__str__
对于方法__repr__:

 1 >>> class test():
 2     def __repr__(self):
 3         return "你好"
 4 
 5 >>> a=test()
 6 >>> a
 7 你好
 8 >>> print(a)
 9 你好
10 >>> 

如果我们在终端中输入对象,使用print都会自动调用方法__repr__
通常,程序员会在开发时,使用__repr__来返回一些关键性的信息便于调试。

点赞