このコードの_
afterの意味は何ですか?for
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
ベストアンサー1
_
Python では主に 3 つの用途があります。
対話型インタープリタセッションで最後に実行された式の結果を保持するには(ドキュメントこの先例は標準のCPythonインタープリタによって設定され、他のインタープリタもそれに倣った。
i18nでの翻訳検索については(テキスト取得ドキュメントの例)のようなコードでは、
raise forms.ValidationError(_("Please enter a correct username"))
汎用の「使い捨て」変数名として:
関数の結果の一部が意図的に無視されている (概念的には破棄されている) ことを示すには、次のコードのように指定します。
label, has_label, _ = text.partition(':')
関数定義の一部として( または を使用
def
)lambda
、シグネチャは固定されていますが(たとえば、コールバックまたは親クラス API によって)、この特定の関数実装ではすべてのパラメータは必要ありません。次のコードがその例です。def callback(_): return True
[長い間、この回答ではこのユースケースはリストされていませんでしたが、前述のように頻繁に登場しました。ここ、明示的にリストする価値がある。
このユースケースは翻訳検索ユースケースと競合する可能性があるため、
_
i18n 翻訳にも使用するコード ブロックでは、使い捨て変数として使用しないようにする必要があります (__
まさにこの理由から、使い捨て変数として二重アンダースコア を好んで使用する人が多くいます)。リンターは、この使用例をしばしば認識します。たとえば、がコードの後半で使用されていない
year, month, day = date()
場合、 はリント警告を発します。が本当に必要ない場合の修正方法は、 と記述することです。ラムダ関数の場合も同様に、 は1 つの引数を必要とするがそれを使用しない関数を作成します。これは、リントによってキャッチされます。修正方法は、 と記述することです。使用されていない変数には、バグやタイプミスが隠れていることがよくあります (たとえば、設定されているが次の行で使用されている)。day
day
year, month, _ = date()
lambda arg: 1.0
lambda _: 1.0
day
dya
Python 3.10で追加されたパターンマッチング機能により、この使用法は「慣例」から「言語構文」へと昇格し、
match
文に関するものになりました。マッチケースでは_
、ワイルドカードパターンその場合、ランタイムはシンボルに値をバインドすることさえありません。その他の使用例では、 は
_
依然として有効な変数名であり、したがってオブジェクトは存続し続けることを覚えておいてください。これが望ましくない場合 (メモリや外部リソースを解放する場合など)、明示的な呼び出しによって、del name
名前が使用されていることをリンターに認識させ、オブジェクトへの参照をすぐにクリアします。