5

我想更改一个 python 函数以返回两个值。如何在不影响任何先前只期望一个返回值的函数调用的情况下实现这一点?

例如。

原始定义:

def foo():
    x = 2
    y = 2
    return (x+y)

总和 = 富()

氖定义:

def foo():
    x = 2
    y = 2
   return (x+y), (x-y)

总和,差异 = foo()

我想以以前对 foo 的调用也保持有效的方式执行此操作?这可能吗?

4

3 回答 3

12
def foo(return_2nd=False):

    x = 2
    y = 2
    return (x+y) if not return_2nd else (x+y),(x-y)

然后调用新版本

sum, diff = foo(True)
sum = foo() #old calls still just get sum
于 2012-07-30T17:47:35.353 回答
2

通过更改返回值的类型,您正在更改此函数与调用它的任何代码之间的“合同”。因此,您可能应该更改调用它的代码。

但是,您可以添加一个可选参数,该参数在设置时将返回新类型。这样的更改将保留旧合同并允许您拥有新合同。尽管有不同类型的返回类型很奇怪。那时,完全创建一个新函数或修复调用代码可能会更干净。

于 2012-07-30T17:48:23.727 回答
0

很抱歉告诉你,函数重载在 Python 中是无效的。因为 Python 不执行类型强制,所以 foo 的多个定义会导致使用最后一个有效的定义。一种常见的解决方案是定义多个函数,或者在函数中添加一个参数作为标志(您需要自己实现)

于 2012-07-30T17:47:26.960 回答