2013-06-18 17 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

संबंधित मुद्दे