3秒でわかる
文字列の前に f を付け、波かっこの中に式を直接書ける Python の記法。連結や format より短く、書式指定まで一緒に済ませられます。
もう少し詳しく
どういうものか
f-string は、文字列リテラルの前に f を付けることで、{} の中に変数や式をそのまま埋め込める Python の記法です。Python 3.6 から使えます。波かっこの中は実行時に評価され、結果が文字列に変換されて差し込まれます。
書けるのは変数だけではありません。計算式、関数呼び出し、辞書の参照、条件式も入ります。
なぜ必要か
同じ出力を古い書き方で作ると、"合計は" + str(total) + "円です" のように str() と + が散らばります。数値を文字列に変換し忘れると TypeError で落ちますし、読むときに文と値の境目を目で追う必要があります。% 演算子や format() は変換の心配こそ不要ですが、埋め込む値が離れた位置に並ぶため、対応関係を数えることになります。f-string は値が使われる場所に値が書いてあるので、対応を数える作業がなくなります。
具体例
name = "佐藤"
price = 1280
rate = 0.0825
items = {"coffee": 3}
print(f"{name}さんの合計は {price} 円です")
print(f"税込 {price * 1.1:.0f} 円") # 小数点以下なし
print(f"手数料は {rate:.2%}") # 8.25%
print(f"|{name:<10}|{price:>8,}|") # 左寄せ・右寄せ・桁区切り
print(f"注文数 {items['coffee']} 点") # 辞書は別のクォートで
print(f"{price=}") # price=1280 (<a href="/glossary/debug" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">デバッグ</a>用)波かっこの中でコロンより後ろは書式指定です。.2f で小数 2 桁、, で 3 桁区切り、< や > で寄せ方向と幅を決められます。ログや帳票の桁そろえがこれだけで済みます。
つまずきやすいところ
外側と同じ引用符を内側で使うと文字列がそこで終わってしまいます。f"{items["coffee"]}" は構文エラーです。外が二重引用符なら内は一重引用符にします。
波かっこそのものを出したいときは {{ と }} のように 2 つ重ねます。JSON の雛形を f-string で書こうとして構文エラーになる原因はほとんどこれです。
f を付け忘れると {name} という文字がそのまま出力されます。エラーにならないので、ログを見て初めて気づく形になります。
SQL を f-string で組み立てるのは避けます。値を直接埋め込むとインジェクションの入口になるため、プレースホルダを使ってドライバに渡します。
似た用語との違い
| 記法 | 例 | 備考 |
|---|---|---|
| f-string | f"{n} 円" | 3.6 以降。最も短い |
| format | "{} 円".format(n) | 3.6 未満でも動く |
| % 記法 | "%d 円" % n | 古い C 由来の記法 |
覚え方
f は format の f。波かっこの中は Python の式がそのまま動く、と覚えておけば書式指定以外は迷いません。