web-dev-qa-db-ja.com

Pythonの単一のアンダースコア "_"変数の目的は何ですか?

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

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

_には、Pythonで3つの主な慣習的な用途があります。

  1. 対話式インタープリターセッションで最後に実行された式(/ステートメント)の結果を保持するため。この先例は標準のCPythonインタプリタによって設定され、他のインタプリタもそれに従っています
  2. 国際化言語での翻訳検索( gettext のドキュメントを参照)は、raise forms.ValidationError(_("Please enter a correct username"))のようになります。
  3. 以下のようなコードのように、関数の結果の一部が意図的に無視されていることを示すための汎用「使い捨て」変数名として。label, has_label, _ = text.partition(':')

後者の2つの目的は矛盾する可能性があるので、国際化にも使用するコードブロックで_を使い捨て変数として使用しないようにする必要があります(多くの人は二重下線__を使い捨て変数として使います)。 。

674
ncoghlan

これは単なる変数名であり、pythonでは使い捨ての変数に_を使用するのが一般的です。ループ変数が実際には使用されていないことを示しているだけです。

175
gsteff

アンダースコアの_はPythonで " 私は気にしない "または " Throwaway "変数と見なされます

  • pythonインタプリタは最後の式の値を_という特別な変数に格納します。

    >>> 10 
    10
    
    >>> _ 
    10
    
    >>> _ * 3 
    30
    
  • アンダースコア_は、特定の値を無視するためにも使用されます。特定の値が不要な場合、または値が使用されていない場合は、値をアンダースコアに割り当てるだけです。

    解凍時に値を無視する

    x, _, y = (1, 2, 3)
    
    >>> x
    1
    
    >>> y 
    3
    

    インデックスを無視する

    for _ in range(10):     
        do_something()
    
53
Ashish Sahu

Pythonでアンダースコアを使用するケースは5つあります。

  1. 最後の式の値をインタプリタに格納するためのものです。

  2. 特定の値を無視します。 (いわゆる「気にしない」)

  3. 変数や機能の名前に特別な意味や機能を与えること。

  4. 「国際化(i18n)」または「ローカライズ(l10n)」機能として使用します。

  5. 数値リテラル値の数字を区切るため。

ここでmingrammer による例を含むNiceの記事です。

14
Reck