2012-10-25 18 views
6

compilatore ha mostrato:Python SyntaxError: 'ritorno' al di fuori funzione

File "temp.py", line 56 
    return result 
SyntaxError: 'return' outside function 

Dove mi è stato sbagliato?

class Complex (object): 
    def __init__(self, realPart, imagPart): 
     self.realPart = realPart 
     self.imagPart = imagPart    

    def __str__(self): 
     if type(self.realPart) == int and type(self.imagPart) == int: 
      if self.imagPart >=0: 
       return '%d+%di'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%d%di'%(self.realPart, self.imagPart) 
    else: 
     if self.imagPart >=0: 
       return '%f+%fi'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%f%fi'%(self.realPart, self.imagPart) 

     def __div__(self, other): 
      r1 = self.realPart 
      i1 = self.imagPart 
      r2 = other.realPart 
      i2 = other.imagPart 
      resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2)) 
      resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
      result = Complex(resultR, resultI) 
      return result 

c1 = Complex(2,3) 
c2 = Complex(1,4) 
print c1/c2 

Che dire di questo?

class Complex (object): 
    def __init__(self, realPart, imagPart): 
     self.realPart = realPart 
     self.imagPart = imagPart    

    def __str__(self): 
     if type(self.realPart) == int and type(self.imagPart) == int: 
      if self.imagPart >=0: 
       return '%d+%di'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%d%di'%(self.realPart, self.imagPart) 
     else: 
      if self.imagPart >=0: 
       return '%f+%fi'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%f%fi'%(self.realPart, self.imagPart) 

    def __div__(self, other): 
     r1 = self.realPart 
     i1 = self.imagPart 
     r2 = other.realPart 
     i2 = other.imagPart 
     resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2)) 
     resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
     result = Complex(resultR, resultI) 
     return result 

c1 = Complex(2,3) 
c2 = Complex(1,4) 
print c1/c2 
+3

Il vostro rientro è incoerente. Usa quattro spazi per livello di indizione come raccomandato da PEP-8. –

+0

@Tichodroma Ho aggiornato il codice come sopra. Ma mostra ancora la funzione 'return' all'esterno ... – lavitanien

+2

Hai ancora indentazione inconsistente. Utilizza * quattro * spazi per ogni livello di indentazione. In questo momento hai ancora quattro e otto spazi misti. –

risposta

10

Vorrei controllare il mio indentazione, sembra fuori. Stai forse mescolando tab e spazi? Il PEP8 (Python Style Guide) consiglia di utilizzare 4 spaces only. A differenza di altri linguaggi, whitepace fa una grande differenza in Python, quindi la coerenza è importante.

Quanto sopra rende anche la seguente raccomandazione:

Quando invocando la riga di comando interprete Python con l'opzione -t, emette avvertimenti circa il codice che mescola illegalmente schede e gli spazi. Quando si utilizza -tt questi avvisi diventano errori. Queste opzioni sono altamente raccomandate !

In particolare, il vostro secondo else sembra essere off (probabilmente dovrebbe essere rientrato), e questo metodo def __div__(self, other): troppo (che penserei dovrebbe essere allo stesso livello delle altre def s - vale a dire, si è trasferito " fuori "piuttosto che rientrato).

Problemi di miscelazione di tabulazioni/spazi vuoti sono facili da ottenere poiché entrambi i caratteri sono "invisibili".

+1

@Tichodroma ha concordato .. Stavo solo aggiungendo qualche altro commento .. – Levon

+0

Ho aggiornato il codice come sopra. Ma mostra ancora "return" al di fuori della funzione ... – lavitanien

2

Con la mia copia e incolla, tutto da questa linea:

else: 
if self.imagPart >=0: 
     return '%f+%fi'%(self.realPart, self.imagPart) 
elif self.imagPart <0: # Everything under here.. 

a questa linea:

resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
result = Complex(resultR, resultI) 
return result # Needs to be unindented. 

ha indentazione sbagliata.

2

Assicurati che il tuo __div__ sia dichiarato allo stesso livello del tuo __str__ (in questo momento, è dichiarato all'interno dello __str_).

1

Beh, sono nuovo del mondo Python. Quello che ho imparato è che la dichiarazione di ritorno dovrebbe essere qualcosa del genere.

Esempio uno: -

def split_train_test(data, test_ratio): 
    shuffled_indices = np.random.permutation(len(data)) 
    test_set_size = int(len(data) * test_ratio) 
    test_indices = shuffled_indices[:test_set_size] 
    train_indices = shuffled_indices[test_set_size:] 
    return data.iloc[train_indices],data.iloc[test_indices] 

Esempio due: -

def load_housing_data(housing_path=HOUSING_PATH): 
    csv_path = os.path.join(housing_path, "housing.csv") 
    return pd.read_csv(csv_path) 

ho risposto qui: - https://stackoverflow.com/a/47377418/2298357

Problemi correlati