Python の単一のアンダースコア「_」変数の目的は何ですか? 質問する

Python の単一のアンダースコア「_」変数の目的は何ですか? 質問する

このコードの_afterの意味は何ですか?for

if tbh.bag:
    n = 0
    for _ in tbh.bag.atom_set():
        n += 1

ベストアンサー1

_Python では主に 3 つの用途があります。

  1. 対話型インタープリタセッションで最後に実行された式の結果を保持するには(ドキュメントこの先例は標準のCPythonインタープリタによって設定され、他のインタープリタもそれに倣った。

  2. i18nでの翻訳検索については(テキスト取得ドキュメントの例)のようなコードでは、

    raise forms.ValidationError(_("Please enter a correct username"))
    
  3. 汎用の「使い捨て」変数名として:

    1. 関数の結果の一部が意図的に無視されている (概念的には破棄されている) ことを示すには、次のコードのように指定します。

      label, has_label, _ = text.partition(':')
      
    2. 関数定義の一部として( または を使用deflambda、シグネチャは固定されていますが(たとえば、コールバックまたは親クラス API によって)、この特定の関数実装ではすべてのパラメータは必要ありません。次のコードがその例です。

      def callback(_):
          return True
      

      [長い間、この回答ではこのユースケースはリストされていませんでしたが、前述のように頻繁に登場しました。ここ、明示的にリストする価値がある。

    このユースケースは翻訳検索ユースケースと競合する可能性があるため、_i18n 翻訳にも使用するコード ブロックでは、使い捨て変数として使用しないようにする必要があります (__まさにこの理由から、使い捨て変数として二重アンダースコア を好んで使用する人が多くいます)。

    リンターは、この使用例をしばしば認識します。たとえば、がコードの後半で使用されていないyear, month, day = date()場合、 はリント警告を発します。が本当に必要ない場合の修正方法は、 と記述することです。ラムダ関数の場合も同様に、 は1 つの引数を必要とするがそれを使用しない関数を作成します。これは、リントによってキャッチされます。修正方法は、 と記述することです。使用されていない変数には、バグやタイプミスが隠れていることがよくあります (たとえば、設定されているが次の行で使用されている)。daydayyear, month, _ = date()lambda arg: 1.0lambda _: 1.0daydya

    Python 3.10で追加されたパターンマッチング機能により、この使用法は「慣例」から「言語構文」へと昇格し、match文に関するものになりました。マッチケースでは_ワイルドカードパターンその場合、ランタイムはシンボルに値をバインドすることさえありません。

    その他の使用例では、 は_依然として有効な変数名であり、したがってオブジェクトは存続し続けることを覚えておいてください。これが望ましくない場合 (メモリや外部リソースを解放する場合など)、明示的な呼び出しによって、del name名前が使用されていることをリンターに認識させ、オブジェクトへの参照をすぐにクリアします。

おすすめ記事