str()函数:将值转化为适于人阅读的字符串的形式
repr()函数:将值转化为供解释器读取的字符串形式
1.计算整数和字符串得到的结果不同
整数型:
s=123
print(s) #123
print(repr(s)) #123
print(str(s)==s) #False
print(repr(s)==s) #False
print(len(str(s))) #3
print(len(repr(s))) #3
字符串型:计算长度两者的结果不一致
s="ace"
print(s) #ace
print(repr(s)) #'ace'
print(str(s)==s) #True
print(repr(s)==s) #False
print(len(str(s))) #3
print(len(repr(s))) #5
2.命令行下print和直接输出的结果不同
>>> class C():
... def __repr__(self):
... return "repr C"
... def __str__(self):
... return "str C"
...
>>> c=C()
>>> c
repr C
>>> print(c)
str C
3.类里面,如果自定义__str__方法,str(object)会调用该类的__str__方法
class A():
def __str__(self):
return "I am A's str!"
a=A()
print(a) #I am A's str!
print(str(a)) #I am A's str!
4.类里面,如果自定义__repr__方法,但是未自定义__str__方法,str(object)会调用该类的__repr__方法
class B():
def __repr__(self):
return "I am B's repr!"
b=B()
print(repr(b)) #I am B's repr!
print(str(b)) #I am B's repr!
print(B) #<class '__main__.B'>
print(B()) #I am B's repr!
5.类里面,如果既自定义__repr__方法,也自定义__str__方法,str(object)会调用该类的__repr__方法
class C():
def __repr__(self):
return "I am C's repr!"
def __str__(self):
return "str ccc"
c=C()
print(c) #str ccc
print(str(c)) #str ccc
注,如果以列表或字典形式打印类实例,只会调用__repr__
class A():
def __str__(self):
return "I am A's str!"
a=A()
print(a) #I am A's str!
print(str(a)) #I am A's str!
print(str([a])) #[<__main__.A object at 0x0000017E449C0A90>]
print(str({a})) #{<__main__.A object at 0x0000017E449C0A90>}
class B():
def __repr__(self):
return "I am B's repr!"
b=B()
print(repr(b)) #I am B's repr!
print(str(b)) #I am B's repr!
print(B) #<class '__main__.B'>
print(B()) #I am B's repr!
print(str([b])) #[I am B's repr!]
print(str({b})) #{I am B's repr!}
class C():
def __repr__(self):
return "I am C's repr!"
def __str__(self):
return "str ccc"
c=C()
print(c) #str ccc
print(str(c)) #str ccc
print(str([c])) #[I am C's repr!]
print(str({c})) #{I am C's repr!}