对比Python中的repr()函数和str()函数的用法及区别
Python中的repr()函数和str()函数都是用于将对象转换为字符串的函数,但它们在用法和区别上有一些不同。
首先,repr()函数和str()函数都可以将对象转换为字符串,但它们的输出格式是不同的。
repr()函数返回一个对象的字符串表示形式,可以认为是一种脚本化的表达方式,通常包含了关于对象的详细信息,以便于开发者理解和调试。它的输出通常是可以直接被解释器读取的,并且可以通过eval()函数将其转换回原始对象。
例如,对于一个整数对象,repr()函数会返回一个带有整数值的字符串表示形式,而对于一个自定义的类对象,repr()函数可能会返回类名和属性值的字符串表示形式。
>>> repr(123)
'123'
>>> repr('Hello')
"'Hello'"
>>> class Person:
... def __init__(self, name):
... self.name = name
...
>>> person = Person('Alice')
>>> repr(person)
'<__main__.Person object at 0x7fb176b8d280>'
str()函数返回一个对象的易读形式的字符串,通常用于将对象转换为用户可以理解的形式。它的输出通常不包含关于对象的详细信息,而是更加友好和简洁的方式展示。
例如,对于一个整数对象,str()函数会返回整数值所对应的字符串,而对于一个自定义的类对象,str()函数可能会返回一个描述对象属性的字符串。
>>> str(123)
'123'
>>> str('Hello')
'Hello'
>>> str(person)
'<__main__.Person object at 0x7fb176b8d280>'
另外,repr()函数和str()函数的输出有一些其他的约定。当对象没有定义__str__()方法时,str()函数会使用repr()函数的输出;而当对象没有定义__repr__()方法时,repr()函数会使用str()函数的输出。
以下是一个例子,演示了这两个函数的用法和区别:
class Person:
def __init__(self, name):
self.name = name
person = Person('Alice')
print(repr(person))
print(str(person))
输出结果如下:
'<__main__.Person object at 0x7fb176b8d280>' '<__main__.Person object at 0x7fb176b8d280>'
在这个例子中,我们定义了一个Person类,并创建了一个person对象。由于我们没有为Person类定义__repr__()和__str__()方法,所以repr()函数和str()函数的输出结果是相同的。
综上所述,repr()函数和str()函数都可以将对象转换为字符串,但repr()函数的输出更多的是对象的详细信息和可读性更差的形式,而str()函数的输出更偏向于易读性较强的形式。
