Python 3.6の概要 (その1 - f文字列)
f文字列
これまで、Pythonで文字列に変数を埋め込む方式にはいくつかあったが、ついに式を文字列中に直接記述できるようになった。 (PEP 498 -- Literal String Interpolation)
式を埋め込んだ文字列はf文字列(formatted string:フォーマット済み文字列)と呼ばれ、raw文字列の r
と同じように、先頭に f
を指定する
f文字列は通常の文字列と同じようも使えるが、文字列内の {}
で囲まれた部分は、Pythonの式として評価し、その結果を文字列として出力する。
>>> f'hello' # 式を含まないf文字列 'hello' >>> f'100+1={100+1}' # 式を評価 '100+1=101' >>> order={'spam':100, 'ham':200} >>> f'spam: {order["spam"]}, ham: {order["ham"]}' # 変数を参照 'spam: 100, ham: 200' >>> f'Hello, {input("名前を入力してください: ")}' # 関数の呼び出し 名前を入力してください: いしもと 'Hello, いしもと'
文字列のformat
メソッドと同じように、出力フォーマットも指定できる。
>>> f'{100:0>20f}' '0000000000100.000000'
f文字列内の式は、Pythonのコンパイル時に抽出され、実行時に値を評価して結果をフォーマットしている。式の評価は、文字列の左から順に行われる。
>>> import dis, sys >>> def f(a, b): ... return f'A: {a}, B: {b!a:10s}' ... >>> dis.dis(f) 2 0 LOAD_CONST 1 ('A: ') 2 LOAD_FAST 0 (a) 4 FORMAT_VALUE 0 6 LOAD_CONST 2 (', B: ') 8 LOAD_FAST 1 (b) 10 LOAD_CONST 3 ('10s') 12 FORMAT_VALUE 7 (ascii, with format) 14 BUILD_STRING 4 16 RETURN_VALUE
f文字列内の式は、通常の式と変わりなく評価してスタックに積まれ、FORMAT_VALUE
というバイトコードで文字列に変換される。最後にBUILD_STINRG
で、文字列を結合する、という仕組みのようだ。現行の文字列フォーマットと比べても、とくにオーバーヘッドが大きい、ということもなさそうだ。