【问题标题】:best practice for multiple return type from function函数的多种返回类型的最佳实践
【发布时间】:2018-12-22 07:10:31
【问题描述】:

我只是从 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

【问题讨论】:

    标签: python return return-value return-type


    【解决方案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)
    

    如果您将返回单个(或没有)值也作为列表。优势应该很明显。您可能认为您是在帮呼叫者一个忙 - 但事实并非如此。

    对链接文章的一些评论:我认为他们在这个问题上给出了一个次优的例子。该示例更多的是关于返回错误代码与引发异常,这有点不同。

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2020-12-13
      • 2018-11-01
      • 2012-02-03
      • 2018-03-26
      相关资源
      最近更新 更多