欢迎访问宙启技术站
智能推送

深入理解Python中的repr()和str()函数的区别

发布时间:2023-12-16 21:42:55

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()函数返回的字符串表示形式更偏向于人类友好和可视化效果。在实际应用中,我们可以根据具体的需求选择使用这两个函数。