代码之家  ›  专栏  ›  技术社区  ›  John Rutherford

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

  •  61
  • John Rutherford  · 技术社区  · 16 年前

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

    在C中,我将使用out参数作为字符串,但在python中没有等价的参数。我对python还很陌生,我唯一能想到的就是返回一个具有布尔值和修改过的字符串的元组。

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

    5 回复  |  直到 11 年前
        1
  •  121
  •   Svend    11 年前
    def f(in_str):
        out_str = in_str.upper()
        return True, out_str # Creates tuple automatically
    
    succeeded, b = f("a") # Automatic tuple unpacking
    
        2
  •  28
  •   Jason Baker    16 年前

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

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

        3
  •  15
  •   rmmh CJ Cullen    16 年前

    返回元组。

    def f(x):
        # do stuff
        return (True, modified_string)
    
    success, modified_string = f(something)
    
        4
  •  7
  •   Chris Upchurch    16 年前

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

        5
  •  3
  •   tuxedo    16 年前

    抛出一个失败的异常是一个很好的继续进行的方法,如果您返回了很多不同的值,您可以返回一个元组。对于您引用的具体情况,我经常采用中间方法:成功时返回修改后的字符串,失败时不返回。对于一个未恢复的C程序员来说,我已经足够想在失败时返回一个指向char的空指针了。

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