2008-09-01 84 views
57

我有一個功能,我需要做一些字符串。我需要函數返回一個指示操作是否成功的布爾值,並且我還需要返回修改後的字符串。從Python中的函數返回多個值的最佳方式是什麼?

在C#中,我會爲字符串使用out參數,但Python中沒有等價物。我對Python仍然很陌生,我能想到的唯一事情就是返回一個帶有布爾和修飾字符串的元組。

相關問題:Is it pythonic for a function to return multiple values?

+0

我已經添加了一個指向相關問題的鏈接 – jfs 2009-01-08 18:32:47

回答

116
def f(in_str): 
    out_str = in_str.upper() 
    return True, out_str # Creates tuple automatically 

succeeded, b = f("a") # Automatic tuple unpacking 
+1

我想補充說的是,目前的方法與陣列和矩陣的工作也 – Nicholas 2014-08-04 13:37:56

7

返回一個元組是通常的方式在Python做到這一點。

15

返回一個元組。

def f(x): 
    # do stuff 
    return (True, modified_string) 

success, modified_string = f(something) 
+0

我的合作伙伴與我討論天氣問題時,應該添加`(`和`)`來返回多個值。當我在Pycharm中編寫代碼時,ide在顯示用'()`返回多個值的行中顯示磨損,但我們在pep8找不到代碼樣式規則。你如何看待它?謝謝。 – 2017-08-11 06:55:39

28

爲什麼不拋出一個異常,如果操作不成功?就我個人而言,我傾向於認爲,如果您需要從函數返回多個值,則應重新考慮您是以正確的方式做事還是使用對象。

但更直接的一點是,如果拋出一個異常,你迫使他們處理這個問題。如果您嘗試返回一個表示失敗的值,則很可能有人無法檢查該值,並最終導致一些可能難以調試的錯誤。

+1

同意。 Pythonic函數不應該返回代碼來表示「成功/失敗」,當一個人比另一個更可能時。只是在例外情況下拋出異常。 這就是說,只是在需要時返回一個元組:「return a,b,c」 – 2008-10-10 19:19:32

3

拋出異常是失敗的一種好方法,如果你返回了很多不同的值,你可以返回一個元組。對於您引用的具體情況,我經常採取中間方法:成功返回修改後的字符串,並在失敗時返回None。我足夠的一個未被構建的C程序員想要在失敗時返回一個NULL指針到char。

如果我正在編寫一個例程作爲更大的庫的一部分並被其他開發人員使用,我會在失敗時拋出異常。當我吃自己的狗糧時,我可能會返回不同的類型,並在返回時進行測試。

相關問題