2008-09-01 86 views
57

我有一个功能,我需要做一些字符串。我需要函数返回一个指示操作是否成功的布尔值,并且我还需要返回修改后的字符串。从Python中的函数返回多个值的最佳方式是什么?

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

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

+0

我已经添加了一个指向相关问题的链接 – jfs 2009-01-08 18:32:47

回答

116
def f(in_str): 
    out_str = in_str.upper() 
    return True, out_str # Creates tuple automatically 

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

我想补充说的是,目前的方法与阵列和矩阵的工作也 – Nicholas 2014-08-04 13:37:56

7

返回一个元组是通常的方式在Python做到这一点。

15

返回一个元组。

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

success, modified_string = f(something) 
+0

我的合作伙伴与我讨论天气问题时,应该添加`(`和`)`来返回多个值。当我在Pycharm中编写代码时,ide在显示用'()`返回多个值的行中显示磨损,但我们在pep8找不到代码样式规则。你如何看待它?谢谢。 – 2017-08-11 06:55:39

28

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

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

+1

同意。 Pythonic函数不应该返回代码来表示“成功/失败”,当一个人比另一个更可能时。只是在例外情况下抛出异常。 这就是说,只是在需要时返回一个元组:“return a,b,c” – 2008-10-10 19:19:32

3

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

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

相关问题