2013-06-18 23 views
7

Ho un problema con le rappresentazioni di stringa. Sto cercando di stampare il mio oggetto e talvolta ottengo virgolette singole nell'output. Per favore aiutami a capire perché succede e come posso stampare l'oggetto senza virgolette.Perché alcune stringhe Python sono stampate con virgolette e alcune sono stampate senza virgolette?

Ecco il mio codice:

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) 

Ecco quello che faccio:

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

Ecco cosa ottengo:

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

Ecco quello che voglio ottenere:

(X (Y y) (Z z)) 

Perché le virgolette appaiono attorno ai valori dei nodi terminali, ma non attorno ai valori dei non-terminali?

+0

OK, ho trovato la spiegazione perché repr (x) produce stringhe tra virgolette [qui] (http://stackoverflow.com/questions/7784148/understanding-repr-function-in-python) – Olga

risposta

14

repr su una stringa fornisce quotazioni mentre str no. es .:

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

Prova:

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) 

invece.

+0

Funziona per me. – Olga

Problemi correlati