Почему некоторые строки Python печатаются с кавычками, а некоторые — без кавычек?

У меня проблема со строковыми представлениями. Я пытаюсь напечатать свой объект, и иногда на выходе получаю одинарные кавычки. Пожалуйста, помогите мне понять, почему это происходит и как я могу распечатать объект без кавычек.

Вот мой код:

class Tree:
    def __init__(self, value, *children):
        self.value = value
        self.children = list(children)
        self.marker = ""

    def __repr__(self):
        if len(self.children) == 0:
            return '%s' %self.value
        else:
            childrenStr = ' '.join(map(repr, self.children))
            return '(%s %s)' % (self.value, childrenStr)

Вот что я делаю:

from Tree import Tree
t = Tree('X', Tree('Y','y'), Tree('Z', 'z'))
print t

Вот что я получаю:

(X (Y 'y') (Z 'z'))

Вот что я хочу получить:

(X (Y y) (Z z))

Почему кавычки появляются вокруг значений терминальных узлов, но не вокруг значений нетерминалов?


person Olga    schedule 18.06.2013    source источник
comment
Хорошо, я нашел объяснение, почему repr(x) создает строки в кавычках здесь   -  person Olga    schedule 18.06.2013


Ответы (1)


repr в строке дает кавычки, а str — нет. например.:

>>> s = 'foo'
>>> print str(s)
foo
>>> print repr(s)
'foo'

Пытаться:

def __repr__(self):
    if len(self.children) == 0:
        return '%s' %self.value
    else:
        childrenStr = ' '.join(map(str, self.children))  #str, not repr!
        return '(%s %s)' % (self.value, childrenStr)

вместо.

person mgilson    schedule 18.06.2013