repr() 和 str() 的区别
- str()
1 使用str()函数时, 才调用__str_ __
2 使用print()函数时
3 str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。 - repr()
1 使用repr()时,才调用___repr_ __
2 在交互式控制台(即:>>)或调试程序(即Debug运行代码时)
3 repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用
class A(object):pass
a = A()
>>> a
<__main__.A object at 0x000002E26B4D89E8>
>>> str(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> print(a)
<__main__.A object at 0x000002E26B4D89E8>
>>> print(str(a))
<__main__.A object at 0x000002E26B4D89E8>
>>> print(repr(a))
<__main__.A object at 0x000002E26B4D89E8>
上面显示的内容是由于类的特殊方法(没有自定义str和repr时), 在print()和直接运行实例a的时候回打印字符串。就会出现上面的结果。
class A(object):
def __repr__(self):
return '这是__repr__'
def __str__(self):
return '这是__str__'
>>> a
这是__repr__
>>> repr(a)
'这是__repr__'
>>> str(a)
'这是__str__'
>>> print(a)
这是__str__
class A(object):
def __str__(self):
return '这是__str__'
a = A()
>>> a
<__main__.A object at 0x000002E26B4D89B0>
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89B0>'
>>> str(a)
'这是__str__'
>>> print(a)
这是__str__
class A(object):
def __repr__(self):
return '这是__repr'
>>> a
这是__repr__
>>> repr(a)
'这是__repr__'
>>> str(a)
'这是__repr__'
>>> print(a)
这是__repr__
总结:如果一个对象没有__str__函数,python又需要调用它时,解释器就会__repr__作为代替,
repr(object)官方文档
repr(object) 返回包含对象的可打印表示形式的字符串
1 尝试生成这样一个字符串,其结果绝大多数情况下(不是所有)可以通过内建函数eval(重新得到该对象,即obj==eval(repr(obj))这个等式是成立的。
2 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址)
3 类可以通过定义__repr__()方法来控制这个函数返回给它的实例的内容。
str() 返回包含对象的可打印表示形式的字符串
1 尝试生成这样一个字符串,结果不可以通过eval()可重新生成同样的对象
a = 'hello'
>>a
'hello'
>>print(a)
hello
>>str(a) #字符串本身还是字符串
'hello'
>>print(str(a))
hello
>>repr(a)
"'hello'"
>>print(repr(a))
'hello'
https://blog.youkuaiyun.com/sinat_41104353/article/details/79254149
https://blog.youkuaiyun.com/WIinter_FDd/article/details/78063985