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

9 浏览
0 Comments

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

我对字符串表示有一个问题。我试图打印我的对象,但有时输出中会出现单引号。请帮助我理解为什么会出现这种情况,以及如何在打印对象时去掉引号。\n以下是我的代码:\n

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)

\n以下是我的操作:\n

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

\n以下是我的输出:\n(X (Y \'y\') (Z \'z\'))\n\n以下是我想要的输出:\n(X (Y y) (Z z))\n\n为什么终端节点的值周围会出现引号,而非终端节点的值周围没有引号?

0
0 Comments

有时候在打印Python字符串时会带引号,而有时候则不会带引号。这是因为在Python中,使用不同的方法来打印字符串会导致不同的结果。

在Python中,有两个内置函数可以用来打印字符串,分别是str()repr()。这两个函数的作用是将一个对象转换为字符串表示形式。

str()函数返回的是对象的"可读"形式,它会尽可能地将对象转换为人类易读的形式。当我们使用str()函数打印一个字符串时,它会去掉字符串周围的引号,只显示字符串的内容。

repr()函数返回的是对象的"官方"形式,它会尽可能地保留对象的详细信息。当我们使用repr()函数打印一个字符串时,它会在字符串周围添加引号,以表示这是一个字符串对象。

下面的例子可以更好地说明这个问题:

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

在上面的例子中,我们先将字符串'foo'赋值给变量s,然后分别使用str()repr()函数来打印这个字符串。使用str()函数打印时,只会显示字符串的内容foo;而使用repr()函数打印时,会显示字符串的内容'foo',包含了引号。

如果我们想要在打印字符串时去掉引号,可以使用str()函数代替repr()函数。例如,我们可以修改代码如下:

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)

在上面的代码中,__repr__()方法被重写,使用str()函数来将子节点转换为字符串,而不是使用repr()函数。这样就可以在打印时去掉字符串周围的引号。

总之,Python字符串在打印时是否带引号取决于使用的打印方法,str()函数会去掉引号,而repr()函数会保留引号。如果想要去掉引号,可以使用str()函数代替repr()函数。

0