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

Python中的repr()函数与str()函数的区别与联系

发布时间:2023-12-24 22:21:49

Python中的repr()函数和str()函数都是用来返回对象的字符串表示形式的函数,这两个函数之间有一些区别和联系。

### 1. 区别

1.1 返回值类型

- repr()函数返回一个对象的字符串表示形式,通常用来生成对象的可运行表达式,以方便通过eval()函数重新创建该对象。返回的字符串通常包含了对象的类型信息。

- str()函数返回一个对象的人类可读形式的字符串表示。

1.2 调用时机

- repr()函数一般用于开发环境或者调试阶段,用来获取对象的详细信息以便于调试和检查。

- str()函数用于打印或显示对象的字符串表示,一般用于用户界面或输出结果等场景。

1.3 返回值格式

- repr()函数返回的字符串一般是Python解释器可直接运行的表达式,它只是一个简单的表达。返回的格式是类似于Python代码的形式。

- str()函数返回的字符串一般是可读性比较好的,通常不带有引号,尖括号或者额外的标记。返回的格式是比较友好的形式。

### 2. 联系

repr()函数和str()函数有一个联系就是:如果一个对象没有定义自己的__str__()方法,那么str()函数会调用repr()函数来获取对象的字符串表示。

### 3. 使用例子

下面通过几个例子来演示repr()函数和str()函数的区别与联系:

#### 例子1:自定义类的示例

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(1, 2)

print(repr(p))  # Point(1, 2)
print(str(p))   # (1, 2)

在上面的例子中,我们定义了一个Point类,重写了__repr__()__str__()方法来返回对象的字符串表示。当我们使用repr()函数和str()函数将对象p打印出来时,会返回不同的结果。

#### 例子2:内置类型的示例

a = [1, 2, 3]
s = 'Hello, World!'
d = {'name': 'John', 'age': 30}
n = 3.14159

print(repr(a))  # [1, 2, 3]
print(str(a))   # [1, 2, 3]

print(repr(s))  # 'Hello, World!'
print(str(s))   # Hello, World!

print(repr(d))  # {'name': 'John', 'age': 30}
print(str(d))   # {'name': 'John', 'age': 30}

print(repr(n))  # 3.14159
print(str(n))   # 3.14159

在上面的例子中,我们使用repr()函数和str()函数将一些内置类型的对象打印出来,观察返回的结果。可以看到,对于内置类型的对象,repr()函数和str()函数的返回结果通常是相同的。

#### 例子3:一个没有定义__str__()方法的类的示例

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f'Person({self.name}, {self.age})'

p = Person('John', 30)

print(repr(p))  # Person(John, 30)
print(str(p))   # Person(John, 30)

在上面的例子中,我们定义了一个Person类,只定义了__repr__()方法,没有定义__str__()方法。当我们使用str()函数将对象p打印出来时,由于没有__str__()方法,会调用__repr__()方法来获取对象的字符串表示。