2012-10-25 68 views
6

編譯器外 '迴歸' 表明:的Python語法錯誤:函數

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

哪裏是我錯了嗎?

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 

這是怎麼回事?

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

你縮進不一致。按照PEP-8的建議,每個凹痕級別使用四個空格。 – 2012-10-25 11:58:19

+0

@Tichodroma我已經更新了上面的代碼。但它仍然顯示'返回'功能... – lavitanien

+2

你仍然有不一致的凹痕。請在每個縮進級別使用*四個*空格。現在你仍然有四個和八個空間混合。 – 2012-10-25 12:14:29

回答

10

我會檢查我的縮進,它看起來不對。你可能混合標籤和空格? PEP8 (Python Style Guide)建議使用4 spaces only。與其他語言不同,whitepace在Python中有很大的不同,因此一致性非常重要。

上面還提出如下建議:

當與-t選項調用了Python命令行解釋, 它發出有關非法混合製表符和空格的代碼警告。 使用-tt時,這些警告會變成錯誤。這些選項是高度推薦的 !

特別是你的第二else似乎是關閉(可能應縮進),這種方法def __div__(self, other):太(這我想應該是在同一水平作爲您其他def秒 - 即感動「 out「而不是縮進)。

由於兩個字符都是「不可見的」,所以混合製表符/空格的問題很容易實現。

+1

@Tichodroma同意..我只是增加了一些評論.. – Levon

+0

我已經更新了上面的代碼。但它仍然顯示「返回」功能外... – lavitanien

2

通過我的複製和粘貼,一切從該行:

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

這一行:

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

有錯誤的縮進。

2

確保您的__div__與您的__str__(現在,它在__str_內聲明)處於同一級別。

1

那麼我是新的蟒蛇世界。我學到的是return語句應該是這樣的一些東西。

例一: -

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] 

例二: -

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

我回答在這裏: - https://stackoverflow.com/a/47377418/2298357