2012-10-25 13 views
6

Compiler pokazał:Python SyntaxError: 'powrót' poza funkcją

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

Gdzie się myliłem?

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 

Co z tym?

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

Twój Wcięcia jest niespójna. Użyj czterech pól na poziom wgłębienia zgodnie z zaleceniami PEP-8. –

+0

@ Tichodroma Zaktualizowałem kod tak jak powyżej. Ale nadal pokazuje "powrót" poza funkcją ... – lavitanien

+2

Nadal masz niespójne wcięcie. Użyj * czterech * spacji dla każdego poziomu wcięcia. Teraz masz jeszcze cztery i osiem spacji mieszanych. –

Odpowiedz

10

Chciałbym sprawdzić moje wcięcie, wygląda na to. Czy mieszałeś karty i spacje? The PEP8 (Python Style Guide) zaleca używanie 4 spaces only. W przeciwieństwie do innych języków, whitepace robi dużą różnicę w Pythonie, więc spójność jest ważna.

Powyższe sprawia również następujące zalecenia:

podczas wywoływania Python interpretera wiersza polecenia z opcją -t, , których dokonuje ostrzeżenia o kodzie, który nielegalnie miesza kart i spacji. Gdy używasz -tt te ostrzeżenia stają się błędami. Te opcje są wysoce zalecane, !

W szczególności swoje 2-ty else wydaje się być wyłączony (prawdopodobnie powinny być wcięte), a ta metoda def __div__(self, other): też (co myślę, powinny być na tym samym poziomie co inne def s - tj, przeniósł " "raczej niż wcięty").

Problemy z miksowaniem zakładek/spacji są łatwe, ponieważ obie znaki są "niewidoczne".

+1

@ Tichodroma zgodził się .. Właśnie dodałem kilka komentarzy. – Levon

+0

Zaktualizowałem kod tak jak powyżej. Ale nadal pokazuje funkcję "powrotu" poza ... – lavitanien

2

Według moich kopiowania i wklejania, wszystko od tej linii:

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

do linii:

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

ma złą wcięć.

2

Upewnij się, że Twój __div__ jest zadeklarowany na tym samym poziomie, co Twój __str__ (teraz jest zadeklarowany wewnątrz __str_).

1

Cóż, jestem nowy w świecie Pythona. To, czego się nauczyłem, to oświadczenie return powinno być czymś takim.

Przykład pierwszy: -

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] 

Przykład drugi: -

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

Odpowiedziałem tutaj: - https://stackoverflow.com/a/47377418/2298357

Powiązane problemy