76

文字列に対して何かをする必要がある関数があります。操作が成功したかどうかを示すブール値を返す関数が必要です。また、変更された文字列を返す必要があります。

C#では、文字列にoutパラメーターを使用しますが、Pythonには同等のパラメーターはありません。私はまだPythonに非常に慣れていないので、考えられる唯一のことは、ブール値と変更された文字列を含むタプルを返すことです。

関連する質問:関数が複数の値を返すのはpythonicですか?

4

6 に答える 6

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

succeeded, b = f("a") # Automatic tuple unpacking
于 2008-09-01T22:04:02.510 に答える
30

操作が成功しなかった場合は、例外をスローしませんか?個人的には、関数から複数の値を返す必要がある場合は、正しい方法で実行しているか、オブジェクトを使用しているかを再検討する必要があると思う傾向があります。

しかし、もっと直接的に言えば、例外をスローすると、問題に対処するように強制されます。失敗を示す値を返そうとすると、誰かが値を確認できず、デバッグが困難な可能性のあるエラーが発生する可能性があります。

于 2008-09-01T22:09:00.377 に答える
17

タプルを返します。

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

success, modified_string = f(something)
于 2008-09-01T22:03:41.433 に答える
7

タプルを返すことは、Pythonでこれを行う通常の方法です。

于 2008-09-01T22:03:17.223 に答える
3

失敗した場合に例外をスローすることは、続行するための 1 つの良い方法です。多くの異なる値を返す場合は、タプルを返すことができます。あなたが引用している特定のケースでは、私はしばしば中間的なアプローチを取ります: 成功した場合は変更された文字列を返し、失敗した場合は None を返します。私は再構築されていない C プログラマーなので、失敗した場合に char への NULL ポインターを返したいと思っています。

大規模なライブラリの一部として使用され、他の開発者が使用するルーチンを作成している場合、失敗すると例外をスローします。自分のドッグフードを食べているときは、おそらくさまざまな種類を返し、戻ってきたらテストします。

于 2008-09-02T03:15:49.437 に答える
0

複数の式で return ステートメントを使用できます

于 2020-08-19T06:36:55.480 に答える