簡體   English   中英

函數多重返回類型的最佳實踐

[英]best practice for multiple return type from function

我只是從python開始,然后得到一個問題。 設計一個函數返回多種類型的值是個好主意嗎? 我在坐下閱讀了一些信息,並完全理解,遇到錯誤或不滿足前提條件時,最好拋出異常。 但是,如果沒有錯誤,只是返回值的其他多種類型,該怎么辦? 它是一個偽函數,但對於multi_value函數,如果我需要從函數訪問值,則無需編寫諸如multi_value()[0]之類的東西: https : //docs.quantifiedcode.com/python-anti-patterns /maintainability/returning_more_than_one_variable_type_from_function_call.html

from typing import Union
def multi_value(para : Union[list, int]):
    return para[0] if len(para) == 1 else para

def fun(para : Union[list, int]):
    return para

print(type(multi_value([1,2,3]))) #--> [1,2,3]
print(type(multi_value(['1']))) #--> '1'
print(type(multi_value([1]))) #--> 1

沒有不同類型的想法是使您的函數更易於使用。 如果調用者必須檢查返回類型,則他會變得不必要地復雜,難以閱讀並且容易出錯。 更糟糕的是:呼叫者可能根本不做檢查,然后被意外發現。 您展示了一個很好的示例:返回列表或標量值。 如果您按照所示進行操作,則呼叫者必須編寫類似

res = multi_value(x)
try:
    for i in res:
        do_something_with_res(i)
except TypeError:
    do_something_with_res(res)

鑒於您的函數實際上不拋出任何東西,所有這些都將崩潰

for i in multi_value(x)
    do_something_with_res(i)

如果您還返回單個(或沒有)值作為列表。 優勢應該很明顯。 您可能會認為您對呼叫者有所幫助-但這不是真的。

對鏈接文章的一些評論:我認為他們在此問題上給出了一個次優的例子。 該示例更多地是關於返回錯誤代碼而不是引發異常,這有點不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM