2013-06-18 5 views
7

문자열 표현에 문제가 있습니다. 내 개체를 인쇄하려고 할 때 출력물에 작은 따옴표가 표시되기도합니다. 왜 그런 일이 발생하는지 그리고 인용 부호없이 객체를 어떻게 인쇄 할 수 있는지 이해하도록 도와주세요.왜 일부 파이썬 문자열은 따옴표로 인쇄되고 일부는 따옴표없이 인쇄됩니까?

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

내가 얻고 싶은 것입니다 :

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

내가 무엇을 얻을 수 있습니다 :

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

내가 할 것입니다 : 여기

내 코드입니다 :

(X (Y y) (Z z)) 

왜 터미널 노드 값 주위에 따옴표가 있지만 터미널이 아닌 값 주위에는 따옴표가 표시되지 않습니까?

+0

좋아요, 왜 repr (x) 따옴표로 문자열을 생성 설명을 발견 [여기] (http://stackoverflow.com/questions/7784148/understanding-repr-function-in-python) – Olga

답변

14

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) 

.

+0

그것은 나를 위해 작동합니다. – Olga