2014-09-05 90 views
-1

我不知道這是爲什麼返回無簡單的Python函數返回無,我使用return語句

def list_union(self,A,B): 
    A = self.separate(A["fill"]) 
    B = self.separate(B["fill"]) 
    print A 
    print B 
    if len(A)==1 and A[0]=="no": 
     return B.sort() 
    if len(B)==1 and B[0]=="no": 
     return ["no"] 

只是假設A和B正在返回一個列表類型(它是和它工作正常)

A和B可能包含字符串是或否。我只是不明白他們爲什麼會返回無。

讓我補充一下,我不在乎這兩個語句是否爲假,因爲這個程序還有更多的內容,但是我可以通過計算出爲什麼這不起作用來解決我所遇到的任何問題。

+1

如果兩個條件都不是「真」,該怎麼辦? – jonrsharpe 2014-09-05 11:24:31

+2

'B.sort()'返回'None'。改用'sorted(B)'。 – uselpa 2014-09-05 11:27:22

回答

1

B.sort()不返回B,返回None! (但是B按照你想要的順序排序)

你可以使用sorted(B)這將返回你想要的。

事實上,內置的sort()方法在原地修改了列表。

sorted()內置函數構建一個新的排序列表。

+1

我喜歡這個答案,因爲它實際上回答了我的問題,並沒有打擾額外的細節。謝謝!! – 2014-09-05 12:17:19

4

默認情況下,Python中的函數返回None。在你的情況下,它有兩個出口點,但如果其中一個條件是True,它們將只能到達。問問你自己,如果兩個條件都是False會發生什麼?添加另一個回報在年底,來處理這種情況,並返回一個適當的值(或拋出一個異常,如果它是有道理的):

return "Unexpected result" # just an example 

另外,注意sort()返回一個值(它排序該列表就地),因此它也會評估爲None!換句話說,你應該改變這一行:

return B.sort() 

而是執行此操作:

B.sort() 
return B 

或者做到這一點,這確實返回一個新的排序列表:

return sorted(B)