変数の値が必要ない場合は、それを特殊変数に割り当てます_
。
Pythonに関する限り、実際には特別なことは何もありません_
。これは、他のものと同様に、別の正当な識別子名です。
ただし、ほとんどの「lint」スタイルのツール (できれば PyDev を含む)、さらに重要なことに、人間のリーダーにとっては、「この変数は必要ありません。API/構文/それを必要とするものは何でも」. つまり、使用しないことを警告することはありません。
そう:
_, content = myfunc()[2]
はい、これは多くの場合、より読みやすいというのは正しいですmyfunc()[2][1]
。それだけでなく、さらにいくつかのエラーをキャッチするのにも役立ちます。 のmyfunc()[2]
メンバーがちょうど 2 つでない場合、タプルの代入はスローしますが、 はスローし[1]
ません。
非常にまれですが、これは良い考えではありません。なぜなら、値はできるだけ早くガベージ コレクションしたいものであり、_
まったくバインドしないのではなく (たとえば を介して[2][1]
) にバインドすると、それが遅延するからです。
_
もっと深刻なことに、これは:を特別に使用する別のイディオムと競合しますgettext
。
import gettext
_ = gettext.gettext
または、同等に:
from gettext import gettext as _
_
明らかに、gettext ショートカットと無意味な識別子の両方として使用することはできません。(意味はモジュールグローバルレベルでバインドされており、意味のない識別子は関数本体内でのみ使用する必要があるため、実際にはそれでうまくいく可能性があります…しかし、それでも、ある時点で終了するため、試すのは非常に悪い考えです.どちらの場合でも使用を強制するものは何もありませんが、それ以外のものを使用すると、読者を混乱させる可能性があります (おそらく、同じ lint ツールを使用することになりますgettext
) gettext
_
。_
そもそもなだめようとしている)。したがって、特定のプロジェクトでどちらが重要かを判断する必要があります。(通常、 を使用している場合はgettext
、'
一部の値を繰り返し呼び出しmyfunc
て破棄する場合は、ラッパー関数を作成することを検討してください。
def mywrapperfunc():
_, content = myfunc()[2]
return content
次に、コードで次のことができます。
content = mywrapperfunc()
これには多くの利点があります。
- によって返されるシーケンスのインデックス 2 にあるタプルの後半が必要であることを覚えておく必要がある何よりも、明らかに読みやすいです
myfunc
。
- 些細なことではない場合に備えて、素敵な名前 (できればより良いもの
mywrapperfunc
) やコメント/ドキュメント文字列を配置する場所を提供します。
- 後で変更
myfunc
して、必要な値が 2 ではなく 3 になり、2 要素タプルではなく 3 要素タプルの 2 番目のメンバーになった場合mywrapperfunc
、20 の異なる行の代わりに変更するだけで済みます。コード。
_
また、後で競合するイディオムを使用する場合 (たとえば、コードを i18n で国際化する場合gettext
)、1 か所だけ変更する必要があることも意味します。
補足: 対話型インタープリターで_
は、特別な意味があります。最後の対話型コマンドの結果にバインドされます。_
しかし、それは対話型インタープリターで使用できないという意味ではありません。(実際、そこに保存したものはすぐに上書きされるため、非常にまれな GC の問題が発生しないため、さらに優れています。)