为什么有些 Python 字符串打印时带引号,而有些则不带引号?

8

我有一个字符串表示的问题。我想打印出我的对象,但有时输出中会出现单引号。请帮助我理解为什么会出现这种情况,以及如何在不使用引号的情况下打印出对象。

这是我的代码:

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))

为什么终端节点的值周围会出现引号,而非终端节点的值周围则没有?

好的,我找到了关于为什么repr(x)会产生带引号的字符串的解释在这里 - Olga
1个回答

15

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)

而不是。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接