为什么有些Python字符串打印时带引号,而有些则不带引号?
为什么有些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为什么终端节点的值周围会出现引号,而非终端节点的值周围没有引号?
有时候在打印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()
函数。