Python インタープリターは、最後の式の値を に割り当てます_
。
この動作はREPL インタープリターのみに限定されており、インタラクティブなコーディング セッションを支援することを目的としています。
>>> import math
>>> math.pow(3.0, 5)
243.0
>>> result = _
>>> result
243.0
ただし、標準のPython インタープリターは、ユーザー定義の値を踏みにじらないようにある程度の努力をしています。自分で何か他のものを割り当てた場合_
、インタープリターはそれを上書きしません (技術的に言えば、_
変数は__builtin__
属性であり、独自の割り当ては「通常の」グローバルです)。ただし、標準の Python インタープリターは使用していません。あなたは IPython を使用していますが、そのインタープリターはそれほど慎重ではありません。
IPythonは、この動作を明示的に文書化しています。
次の GLOBAL 変数は常に存在します (上書きしないでください!)。
[_]
(単一のアンダースコア) : Python のデフォルトのインタープリターのように、以前の出力を保存します。
[...]
標準の Python REPL 環境では、何かを割り当てた場合でも、それを再度シャドウするグローバル ( ) を介して、または削除することによって_
、最後の式の結果にアクセスできます。__builtins__._
_
del _
Python インタープリターの外で_
は、慣例により、翻訳可能なテキスト関数の名前として使用されます (gettext
モジュールを参照してください。外部ツールは、翻訳可能な文字列を抽出するためにその関数を探します)。
また、慣例により_
、割り当てターゲットとして使用すると、その値を無視することをコードの読者に伝えます。たとえば[random.random() for _ in range(5)]
、5 つのランダムな float 値のリストを生成したりfoo, bar, _ = three_values
、タプル割り当てから 3 番目の値を通知したりする場合は使用されません。_
が既にgettext
機能に使用されている場合は__
、同じ目的に使用できます。