深入理解Python中的repr()和str()函数的区别
Python中的repr()和str()函数都是用来获取对象的字符串表示形式,但它们有一些区别。本文将深入理解这两个函数的异同,并通过一些示例来说明它们的用法和区别。
repr()函数返回一个对象的字符串表示形式,通常可以用来重新创建该对象,或者用于调试目的。对于内置类型,repr()函数返回的字符串通常是一个合法的Python表达式,可以直接通过eval()函数重新创建出原来的对象。对于用户自定义的对象,可以通过重写__repr__()方法来自定义对象的字符串表示形式。
str()函数用于返回一个对象的人类可读的字符串表示形式。它的作用是将对象转换为字符串,便于显示给用户。str()函数比repr()函数更偏向于可读性和可视化的效果。对于用户自定义的对象,可以通过重写__str__()方法来自定义对象的字符串表示形式。
接下来,我们通过几个示例来演示repr()和str()函数的区别和用法。
示例1:内置类型
num = 10 print(repr(num)) # 输出: 10 print(str(num)) # 输出: 10
在这个示例中,repr()和str()函数返回的结果是相同的,因为对于整数类型来说,它们的字符串表示形式是一样的。
示例2:自定义对象
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f'Point({self.x},{self.y})'
def __str__(self):
return f'({self.x},{self.y})'
p = Point(3, 4)
print(repr(p)) # 输出: Point(3,4)
print(str(p)) # 输出: (3,4)
在这个示例中,我们定义了一个Point类,并重写了__repr__()和__str__()方法。repr(p)返回的是一个合法的Python表达式Point(3,4),可以通过eval()函数重新创建出原来的对象。而str(p)返回的是一个人类可读的字符串(3,4),更适合显示给用户。
示例3:特殊字符的转义
text = 'Hello
World'
print(repr(text)) # 输出: 'Hello
World'
print(str(text)) # 输出: Hello
# World
在这个示例中,我们定义了一个包含换行符
的字符串。repr(text)返回的是一个包含了转义字符的字符串'Hello
World',它的输出形式更接近于字符串在Python代码中的表示方式。而str(text)返回的是一个多行字符串,按照换行符进行了分行显示。
综上所述,repr()函数返回的字符串表示形式更偏向于计算机友好和重建对象的能力,而str()函数返回的字符串表示形式更偏向于人类友好和可视化效果。在实际应用中,我们可以根据具体的需求选择使用这两个函数。
