从Python中的函数返回多个值的最好方法是什么?

我有一个function,我需要做一些string。 我需要的函数返回一个布尔值,指示操作是否成功,我也需要返回修改后的string。

在C#中,我会为string使用一个out参数,但在Python中没有等价物。 我对Python仍然很陌生,我能想到的唯一的事情就是返回一个带有布尔值和修饰string的元组。

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

def f(in_str): out_str = in_str.upper() return True, out_str # Creates tuple automatically succeeded, b = f("a") # Automatic tuple unpacking 

如果操作不成功,为什么不抛出exception呢? 就我个人而言,我倾向于认为如果你需要从一个函数中返回多个值,那么你应该重新考虑一下如果你正在做的事情是正确的或者使用了一个对象。

但是更直接的一点是,如果你抛出一个exception,你迫使他们处理这个问题。 如果你试图返回一个表示失败的值,那么很可能有人不能检查这个值,最终会出现一些潜在的难以debugging的错误。

返回一个元组。

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

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

抛出失败的exception是一种好的方法,如果你返回了很多不同的值,你可以返回一个元组。 对于你引用的具体情况,我经常采取一种中间方法:成功返回修改的string,并在失败时返回None。 我足够的一个未被构build的C程序员想要返回一个NULL指针失败字符。

如果我正在编写一个例程作为更大的库的一部分,并被其他开发人员使用,那么我会在失败时抛出exception。 当我吃自己的狗食时,我可能会返回不同的types,并在返回时进行testing。