2012-10-25 33 views
6

biên dịch cho thấy:Python Lỗi Cú pháp: 'trở lại' bên ngoài chức năng

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

Tôi đã ở đâu vậy?

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 

Điều này thì sao?

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

indention của bạn là không phù hợp. Sử dụng bốn khoảng trống cho mỗi mức độ lưu ý theo khuyến nghị của PEP-8. –

+0

@Tichodroma Tôi đã cập nhật mã như trên. Nhưng nó vẫn cho thấy chức năng 'trả lại' bên ngoài ... – lavitanien

+2

Bạn vẫn không nhất quán sự chú ý. Vui lòng sử dụng * bốn * dấu cách cho mỗi cấp độ lưu ý. Ngay bây giờ bạn vẫn có bốn và tám không gian hỗn hợp. –

Trả lời

10

Tôi sẽ kiểm tra sự thụt đầu dòng của mình. Bạn có thể trộn các tab và dấu cách không? PEP8 (Python Style Guide) khuyên bạn nên sử dụng 4 spaces only. Không giống như các ngôn ngữ khác, whitepace tạo ra sự khác biệt lớn trong Python, vì vậy tính nhất quán là quan trọng.

Trên đây cũng làm cho giới thiệu sau đây:

Khi gọi dòng lệnh thông dịch Python với tùy chọn -t, mà nó tạo ra cảnh báo về mã mà pha trộn trái phép các tab và không gian. Khi sử dụng -tt các cảnh báo này sẽ trở thành lỗi. Các tùy chọn này được đánh giá cao !

Đặc biệt, bạn 2 else có vẻ là tắt (có lẽ nên được thụt vào), và phương pháp này def __div__(self, other): quá (mà tôi nghĩ nên được ở mức độ tương tự như def bạn s khác - tức là, di chuyển " ra "chứ không phải thụt lề".

Các sự cố khi trộn tab/khoảng trống rất dễ dàng vì cả hai ký tự đều "ẩn".

+1

@Tichodroma đã đồng ý .. Tôi vừa thêm một số nhận xét khác .. – Levon

+0

Tôi đã cập nhật mã như trên. Nhưng nó vẫn cho thấy chức năng 'trả về' bên ngoài ... – lavitanien

2

Bằng bản sao của tôi và dán, tất cả mọi thứ từ dòng này:

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

Để dòng này:

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

có thụt sai.

2

Đảm bảo rằng __div__ của bạn được khai báo ở cùng cấp với __str__ (ngay bây giờ, nó được khai báo bên trong __str_).

1

Tôi mới làm quen với thế giới python. Những gì tôi học được là tuyên bố trở lại nên có một số điều như thế này.

Ví dụ một: -

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] 

Ví dụ hai: -

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

tôi đã trả lời ở đây: - https://stackoverflow.com/a/47377418/2298357

Các vấn đề liên quan