从函数返回多个值的最佳方法是什么? [重复]

问题描述 投票:0回答:6

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

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

相关问题:函数返回多个值是Pythonic吗?

python variables return
6个回答
136
投票
def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

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

31
投票

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

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


17
投票

返回一个元组。

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

success, modified_string = f(something)

7
投票

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


3
投票

抛出失败异常是一种好方法,如果您返回许多不同的值,则可以返回一个元组。对于您引用的具体情况,我经常采取中间方法:成功时返回修改后的字符串,失败时返回 None 。我是一个未经改造的 C 程序员,希望在失败时返回一个指向 char 的 NULL 指针。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.