Python中的repr()函数与str()函数的区别与联系
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__()方法来获取对象的字符串表示。
