为什么有些Python字符串是用引号打印的,有些是用引号打印的?

Why are some Python strings are printed with quotes and some are printed without quotes?

我对字符串表示法有问题。我试图打印我的对象,有时我会在输出中得到单引号。请帮助我理解为什么会发生这种情况,以及如何在不带引号的情况下打印出对象。

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
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)

我要做的是:

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

我得到的是:

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

以下是我想要的:

1
(X (Y y) (Z z))

为什么引号出现在终端节点的值周围,而不是非终端的值周围?


字符串上的repr提供引号,而str不提供引号。例如。:

1
2
3
4
5
>>> s = 'foo'
>>> print str(s)
foo
>>> print repr(s)
'foo'

尝试:

1
2
3
4
5
6
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)

相反。