从函数返回多个值的最佳方法是啥?

Posted

技术标签:

【中文标题】从函数返回多个值的最佳方法是啥?【英文标题】:What's the best way to return multiple values from a function?从函数返回多个值的最佳方法是什么? 【发布时间】:2010-09-07 11:59:59 【问题描述】:

我有一个函数,我需要对字符串做一些事情。我需要该函数返回一个指示操作是否成功的布尔值,并且我还需要返回修改后的字符串。

在 C# 中,我会为字符串使用 out 参数,但在 Python 中没有等效参数。我对 Python 还是很陌生,我唯一能想到的就是返回一个带有布尔值和修改后的字符串的元组。

相关问题:Is it pythonic for a function to return multiple values?

【问题讨论】:

我添加了相关问题的链接 【参考方案1】:

您可以将 return 语句与多个表达式一起使用

【讨论】:

【参考方案2】:
def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

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

【讨论】:

我想补充一点,目前的方法也适用于数组和矩阵【参考方案3】:

为失败抛出异常是一种很好的处理方式,如果您要返回许多不同的值,则可以返回一个元组。对于您引用的特定情况,我经常采用中间方法:成功时返回修改后的字符串,失败时返回 None。我受够了一个未重构的 C 程序员想要在失败时返回一个指向 char 的 NULL 指针。

如果我正在编写一个例程以用作更大库的一部分并被其他开发人员使用,我会在失败时抛出异常。当我吃自己的狗粮时,我可能会返回不同的类型并在返回时进行测试。

【讨论】:

【参考方案4】:

如果操作不成功,为什么不抛出异常?就个人而言,我倾向于认为,如果您需要从一个函数返回多个值,您应该重新考虑是否以正确的方式做事或使用对象。

但更直接地说,如果你抛出异常,你就是在强迫他们处理这个问题。如果您尝试返回一个指示失败的值,很可能有人无法检查该值并最终导致一些可能难以调试的错误。

【讨论】:

同意。当一个比另一个更有可能时,Pythonic 函数不应该返回指示“成功/失败”的代码。只是在异常情况下抛出异常。话虽如此,只需在需要时返回一个元组:“return a, b, c” 我不喜欢为非致命错误抛出异常的函数。 当失败很常见时,在元组中返回失败信息是一个好方法。示例是您使用测试值多次调用以找到“好”值的函数,您希望它多次失败并最终找到一个好值。在这种情况下,只需“返回结果,原因”而不是引发异常。【参考方案5】:

返回一个元组。

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

success, modified_string = f(something)

【讨论】:

我的伙伴和我争论天气应该在想要返回多个值时添加()。当我在 Pycharm 中编写代码时,ide 显示磨损的行,其中返回多个值与(),但我们在 pep8 处找不到代码样式规则。你怎么看?谢谢。【参考方案6】:

返回元组是 Python 中执行此操作的常用方法。

【讨论】:

以上是关于从函数返回多个值的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 Rails Helper 返回多个标签的最佳方法是啥?

当我已经返回一个值时,从函数返回错误的最佳方法是啥?

在 Java 中返回多个值的最佳实践?

返回多个值的Java方法的最佳实践? [复制]

从 Oracle 函数返回记录的标准方法是啥?

从数据框中的所有列中获取值的最简单方法是啥[重复]