5

2 つの値を返すように Python 関数を変更したいと考えています。戻り値を 1 つだけ期待する以前の関数呼び出しに影響を与えずにそれを達成するにはどうすればよいですか?

たとえば。

元の定義:

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 の定義が複数あると、最後に有効な定義が使用されます。一般的な解決策の 1 つは、複数の関数を定義するか、関数にパラメーターをフラグとして追加することです (これは自分で実装する必要があります)。

于 2012-07-30T17:47:26.960 に答える