Python3.6から、「f文字列(フォーマット済み文字列リテラル:f-string)」が追加されました。

f文字列とは、クウォートで囲んだ文字列の前にfまたはFを付けたもので、その中に波かっこで囲まれた変数名や式があると実行時に置換してくれます。

フォーマット済み文字列リテラル(Python公式ドキュメント)

f文字列の追加により、format()メソッドを使わないでも、文字列の中に書式を指定して数値などの値を埋め込めるようになりました。{0}{1}のようにインデックス番号ではなく、変数名で直接指定できるので、直感的で可読性も良くなります。

そこで、今回はこのf文字列の使い方をまとめてみました。以下のformat()メソッドの記事と合わせてご覧いただくと違いがわかりやすくなります。

ログファイルでは、以下のようにファイル名に日付を含めることがよくあります。 file_20180904.txt 日付の部分(20180904)は毎日変わるのでコードで毎回作成し直す必要があ…
本記事の目次

f文字列の使い方

例えば、以下のようにvalという変数の値を含む文字列を作成するには、先頭にfを付けた文字列の中に{val}を埋め込むだけで可能です。

>>> val = 0.01
>>> f"valの値は{val}です。"
'valの値は0.01です。'

文字列の先頭に付けるfは大文字のFでも構いません。

>>> val = 0.01
>>> F"valの値は{val}です。"
'valの値は0.01です。'

同じ処理をformat()メソッドを使うと以下のようになります。

>>> val = 0.01
>>> "valの値は{0}です。".format(val)
'valの値は0.01です。'

両者を比較するとインデックス番号ではなく変数名を直接使えるf文字列の方が直感的でシンプルです。format()メソッドはPython3であれば使用できるメリットがありますが、これからはf文字列に適宜移行してゆくのがおすすめです。

波かっこをそのまま表示したい場合は?

f文字列では、以下のように波かっこを二重にすると1つの波かっこがそのまま表示されます。

>>> val = 0.01
>>> f"{{と}}で囲むとvalの値の{val}が表示されます。"
'{と}で囲むとvalの値の0.01が表示されます。'

書式指定の方法

書式指定は、format()メソッドと同様に「コロン(:)」に続けて追加できます。

>>> val = 0.01
>>> f"valを指数表記にすると{val:.1e}です。"
'valを指数表記にすると1.0e-02です。'

変数名だけでなく「式」も入力できる

波かっこの中に「」を入れるとその結果で置換してくれます。

>>> f"1+2+3+4+5 = {1+2+3+4+5}"
'1+2+3+4+5 = 15'

書式指定も可能です。

>>> f"1+2+3+4+5 = {1+2+3+4+5:*<10}"
'1+2+3+4+5 = 15********'

波かっこの中をPythonが評価してその値を表示してくれるので、以下のようにモジュールの定数をそのまま入れても大丈夫です。

>>> import math
>>> math.pi
3.141592653589793
>>> f"円周率(小数点以下10まで)は、{math.pi:.10f}です"
'円周率(小数点以下10まで)は、3.1415926536です'

文字列や数値を返すメソッドを用いてその結果を表示することもできます。以下では文字列.upper()により変数の大文字を表示しています。

>>> jp = "japan"
>>> f"{jp}は大文字の{jp.upper()}で表記してください。"
'japanは大文字のJAPANで表記してください。'

エラーになるケース

f文字列の中では波かっこは{}で組みで使います。片方だけだと以下のようにエラーになります。

>>> val = 0.01
>>> f"valの値は{valです。"  File "", line 1
SyntaxError: f-string: expecting '}'
>>> f"valの値はval}です。"  File "", line 1
SyntaxError: f-string: single '}' is not allowed

また、波かっこの中がであったり、定義されていない変数名があるとエラーになります。format()メソッドと異なり、中身が空の波かっこはf文字列では使えないので気を付けてください。

>>> val = 0.01
>>> f"valの値は{}です。"  File "", line 1
SyntaxError: f-string: empty expression not allowed
>>> f"valの値は{value}です。"Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'value' is not defined

変数名も一緒に表示する方法(Python3.8から可能)

変数の値だけでなく変数名も一緒に表示したい場合は、波かっこの変数名の後ろに=を付け加えます。以下のように0.01だけでなくval=0.01と表示されます。

>>> val = 0.01
>>> f"valの値は{val=}です。"
'valの値はval=0.01です。'

どの変数の値を表示しているのかが一目瞭然となるので、デバッグで使うと便利です。

>>> val1 = 0.01
>>> val2 = 0.005
>>> f"各変数の値:{val1=}, {val2=}"
'各変数の値:val1=0.01, val2=0.005'