web-dev-qa-db-ja.com

Python関数のいくつかの戻り値をエレガントに無視する方法は?

関数が、出力ストリームに送信するのではなく、単に破棄したい戻り値を与える場合があります。これを処理するためのエレガントな方法は何でしょうか?

変更できないものを返す関数について話していることに注意してください。

def fn():
    return 5

私は以前にnullを個人的に使用しましたが、よりPython的な方法を探しています。

null = fn()
11
PascalVKooten

これを示す標準的な方法は、不要な結果を_に割り当てることです。たとえば、関数が2つの値を返すが、最初の値のみが必要な場合は、次のようにします。

value, _ = myfunction(param)

ほとんどのPython lintersは、_の使用を認識し、未使用の変数について文句を言いません。

すべての返品を無視したい場合は、何にも割り当てないでください。 Pythonは、指示がない限り、結果に対して何もしません。結果の印刷は、Pythonシェルのみの機能です。

20
Daniel Roseman

Nullに割り当てるというアイデアは本当に気に入っていますが、予期しない副作用があります。

>>> print divmod(5, 3)
(1, 2)
>>> x, null = divmod(5, 3)
>>> print null
2

主にPythonでコーディングする人にとって、これはおそらく問題ではありません。nullは_と同じくらいジャンク値である必要があります。

ただし、Javascriptのような他の言語を切り替える場合は、Noneではなくnullとの比較を誤って書き込む可能性があります。未知の変数との比較に関する通常のエラーを吐き出すのではなく、Pythonはそれを黙って受け入れるだけで、今ではまったく予期しない真と偽の条件が発生しています...これこれは、コードを1時間見つめ、それが突然あなたにぶつかって馬鹿のように感じるまで、間違っていることを理解できないようなエラーです。

明らかな修正も機能しません:

>>> x, None = divmod(5, 3)
File "<stdin>", line 1
SyntaxError: cannot assign to None

...これは本当に残念です。 Python(および地球上の他のすべての言語)では、変数の数に関係なく、すべてのパラメーターを暗黙的に破棄できます戻ってきた:

>>> divmod(5, 3)

...しかし明示的にパラメータをNoneに割り当てて破棄することは許可されていませんか?

Pythonインタープリターが、Noneへの割り当てを、明確な結果を伴う意図的な選択ではなく、構文エラーとして特徴付けることは、一種の愚かなことだと感じます。誰かがその理由を考えることができますか?

8
David Stein