関数が値のタプルを返すが、それらの値の1つだけが後で使用される状況を処理するための推奨される/一般的に受け入れられているコーディングスタイルはありますか?電話はおそらくやり過ぎです...)?する代わりに
a, b, c = foo()
次に、b
とc
を使用しないだけです。次のバリアントのうち、どちらを優先するべきですか(または別のバリアントはありますか?):
a, _, _ = foo()
(これは非常に明確でシンプルですが、_ = gettext.gettext
翻訳を使用する多くのアプリケーションで使用されます)
a, unused, unused = foo()
(あまり魅力的ではないと思いますが、dummy
のような他の名前でも同じです)
a = foo()[0]
(私には()[0]
はPythonicでないように見えます…)
未使用の変数にアンダースコアを使用することは間違いなく許容されます。ただし、一部のコードベースでは、識別子がgettext
の省略形として予約されているため、これはオプションではありません。これは、このスタイルに対する最も頻繁な反対です(ただし、私が判断できる限り、それは大多数にとって問題ではありません)。私はまだそれをお勧めし、常に自分で使用します。
dummy
やunused
のような名前は私を個人的に苛立たせる傾向があり、私はそれほどひどく目にすることはありません(Pythonでは、つまり-dummy
を使用するDelphiコードベースを知っています自由に、そしてそれはまた、問題のプログラムに関連するスクリプトにリークされています)。私はそれに対してあなたに助言します。
返されたタプルから1つのアイテムを抽出するだけでも大丈夫です。また、未使用の値の数を正しく取得する手間も省けます。ただし、2つの潜在的な欠点があることに注意してください。
Pylintは、このようにすることを習慣にしています。
widget, _parent, _children = f()
つまり、未使用の結果には、接頭辞_が付いた説明的な名前が付けられます。 Pylintは、_で始まるローカルを未使用と見なし、_で始まるグローバルまたは属性をプライベートと見なします。
他の人が言ったように、アンダースコア(__
_)が標準です。しかし、アンダースコアが翻訳に使用されている場合、二重のアンダースコアが最良の代替案だと思います。
var, __, value = "VAR=value".partition('=')
これらより良い:
var, unused, value = "VAR=value".partition('=')
var, unused_del, value = "VAR=value".partition('=')
var, _del, value = "VAR=value".partition('=')
プロジェクト全体でこれを1回だけ行う場合、または特定の関数に対して非常にまれに行う場合、gettext
がそのモジュールの問題ではない場合はVariant 1を使用し、それ以外の場合はVariant 3を使用します。
一方、これを頻繁に行っていた場合-特に毎回、戻り値のdifferentサブセットが必要な場合(ラッパーをあなたが気にしないものを返すだけです)、結果を 名前付きタプル に入れるラッパー、または他の記述クラスのインスタンスを書くことは有益かもしれません:
bar = foo()
そして、bar.a
、bar.b
およびbar.c
。
私は非Pythonプログラマーですが、私にとって3番目のバリアントが最も理にかなっています。
バリアント3では、どの値を処理することに関心があるかが明確になります。バリアント1と2では、値を変数に代入して戻すため、それらを使用できます。あいまいな名前を付けた可能性がありますが、不適切な名前付けは実際には問題の解決策ではありません。
明快さはさておき、なぜメモリのスロットに未使用の値を割り当てたいのですか(バリアント1と2のように)?これは、メモリ管理の点で貧弱なソリューションになります。