为什么Python解释器使用repr()来打印表达式?

时间:2016-02-25 15:43:34

标签: python

为什么Python解释器使用repr()来打印表达式?

例如:

>>> S = "First line.\nSecond line."
>>> S
'First line.\nSecond line.'

当然我可以通过print语句触发str()

>>> print S
First line.
Second line.

但为什么在交互模式下默认情况下不会触发str()?在许多方面,这似乎是一个更好的选择。

2 个答案:

答案 0 :(得分:6)

str()用于"漂亮的打印",但在Python解释器中,您更可能需要背景信息,例如对象的id,它是什么类,等等(理论上),repr()用于此。如果你运行pydoc __builtin__.repr,它会说"对于大多数对象类型,eval(repr(object))== object。" 有些类型完全不同,但其__str__方法返回相同的内容。例如,str(str(some_object))str(same_object)相同,因此如果我有一个列表[0, 4, 5],并且我用str打印,我会得到[0, 4, 5] 。如果我使用str(mylist)打印str(),即使它们属于不同类型,我仍会获得[0, 4, 5]。但是,对于repr()str(mylist)将打印为'[0, 4, 5]',这更像是我正在寻找的内容。使用解释器的人可能正在测试某些东西或调试某些东西,他想知道它是一个字符串,而不是真正的列表。

答案 1 :(得分:1)

repr是一种方法,用于返回程序中object is represented的内容,而str则返回它应如何向外显示。

例如

class Person(object):
    def __init__(self, name, age, passport):
        self.name = name
        self.age = age
        self.passport = passport
    def __repr__(self):
        return 'Name: {0}\nAge: {1}\nPassport: {2}'.format(self.name, self.age, self.passport)
    def __str__(self):
        return 'Hi, my name is {0}. How are you?'.format(self.name)

然后在交互式会话中,您可以:

>>> paul = Person('Paul', 30, 'XXXXXXXXX1')
>>> paul
Name: paul
Age: 30
Passport: XXXXXXXXX1
>>> print(paul)
Hi, my name is Paul. How are you?
相关问题