f 文字列の概要(読みやすく速い文字列整形)
f 文字列(f-strings)は、文字列の先頭に f を付け、波括弧 {} の中に変数や式を直接書ける仕組みです。Python 3.6 以降で使え、可読性が高く、旧来の format() や % 記法より書きやすく高速です。画面表示、ログ、テンプレート生成まで幅広く使われ、現代のPythonでは最優先の選択肢です。
name, score = "太郎", 92
print(f"{name}さんの点数は {score} 点") # 太郎さんの点数は 92 点
Python基本の使い方(変数・式・メソッドをそのまま埋め込む)
変数と式を直接書ける
{} の中には変数名だけでなく、計算式や関数・メソッド呼び出しも書けます。余計な連結や str() が不要になり、短く明快になります。
x, y = 10, 20
print(f"{x} + {y} = {x + y}") # 10 + 20 = 30
name = "python"
print(f"大文字: {name.upper()}") # 大文字: PYTHON
Pythonディクショナリやインデックスにも対応
[] を伴う辞書アクセスやリストのインデックスもそのまま書けます。式が長くなる場合は、適度に変数へ分けてから埋め込むと読みやすさが保てます。
person = {"name": "花子", "age": 25}
print(f"{person['name']}さんは{person['age']}歳") # 花子さんは25歳
Python書式指定(幅・整列・桁・カンマ区切りなどを一発で)
小数点以下の桁数、ゼロ埋め、整列
コロンに続ける「書式指定」で見た目を整えます。小数の桁数は .2f、ゼロ埋めは 05d、右寄せや中央寄せは >, ^ などで表現します。
pi = 3.1415926535
print(f"{pi:.2f}") # 3.14(小数2桁)
num = 42
print(f"{num:05d}") # 00042(5桁ゼロ埋め)
print(f"|{num:>6}|") # | 42|(右寄せ)
print(f"|{num:^6}|") # | 42 |(中央寄せ)
Pythonカンマ区切りや指数表記、パーセント
金額などは , 指定で区切りを入れられます。科学技術系表示は e/E、割合は .1% などが直感的です。
price = 1234567
print(f"¥{price:,}") # ¥1,234,567
large = 1_234_567.89
print(f"{large:.2e}") # 1.23e+06(指数)
rate = 0.0875
print(f"{rate:.1%}") # 8.8%(割合)
Pythonデバッグに便利な = 指定子と表現形式の選択
変数名と値を同時に出す(= 指定子)
Python 3.8 以降は、{var=} と書くと「名前=値」をそのまま表示できます。簡易デバッグやログに非常に便利です。
user = "hanako"
score = 92
print(f"{user=}, {score=}") # user='hanako', score=92
Python!r / !s / !a で表示形式を選ぶ
!r は repr(開発者向けの詳細表示)、!s は str(人向けの表示)、!a は ASCII 化を選べます。改行や特殊文字の可視化、デバッグに役立ちます。
text = "Hello\nWorld"
print(f"{text!s}") # 実際の改行を含む表示
print(f"{text!r}") # 'Hello\nWorld'(エスケープが見える)
Python多行テンプレートと複雑な式の整理
三重引用符で多行を整える
レシートやメール本文などの多行テンプレートは、三重引用符で書くと見通しがよくなります。最後に strip() で余計な先頭・末尾改行を落とすと綺麗です。
item, price, qty = "Coffee", 350, 2
subtotal = price * qty
tax = round(subtotal * 0.1)
total = subtotal + tax
receipt = f"""
--- Receipt ---
Item: {item}
Price: ¥{price:,}
Qty: {qty}
Total: ¥{total:,}
"""
print(receipt.strip())
Python式が長いときのコツ
{} の中に長い式を詰め込むと読みにくくなります。中間結果を変数に置き、f 文字列には「意味のある名前」を埋め込む方が保守しやすいです。
discounted = subtotal * 0.9 if total > 1000 else subtotal
print(f"割引後: ¥{discounted:,}")
Python例題で身につける(よく使う現場パターン)
例題1:テーブル風の整列(幅と寄せ)
列幅と寄せを指定して、見やすい表を作ります。
rows = [("item", "price", "qty"), ("coffee", 350, 2), ("tea", 280, 1)]
for item, price, qty in rows:
print(f"{item:<10} {price:>6} {qty:>3}") # 左寄せ/右寄せで整列
# 出力例:
# item price qty
# coffee 350 2
# tea 280 1
Python例題2:日付と時刻のフォーマット
datetime の書式指定は %Y-%m-%d %H:%M:%S などの記号で行います。f 文字列と組み合わせて直感的に書けます。
from datetime import datetime
now = datetime.now()
print(f"今日は {now:%Y-%m-%d} / 現在時刻 {now:%H:%M:%S}")
Python例題3:小数の丸めと見た目の調整
業務仕様の小数桁に合わせて整形します。演算は数値、表示は書式で分けるのが基本です。
avg = (70 + 85 + 90) / 3
print(f"平均: {avg:.1f}") # 小数1桁
print(f"平均(精密): {avg:.6f}") # 小数6桁
Python例題4:デバッグ出力の簡略化(= と !r)
「どの値が入っているか」を一目でわかるログを出します。
q, r = divmod(1234, 10)
print(f"{q=}, {r=}, {str(r)!r}") # q=123, r=4, '4'
Python落とし穴とベストプラクティス(重要ポイント)
複雑すぎる埋め込みは避ける
式を詰め込みすぎると読み手が追えなくなります。中間変数で分解し、f 文字列には「意味の名前」を入れると意図が伝わります。
数値の丸めは「計算」と「表示」を分離
計算は数値の段階で round/floor/ceil を適用し、表示は .2f などで整える——責務の分離で誤差や仕様ブレを防げます。
import math
tax = math.floor(subtotal * 0.1) # 計算仕様をここで確定
print(f"税: ¥{tax:,}") # 表示は整形だけ
Pythonロケール依存の書式に注意
カンマ区切りや日付書式は文化圏で異なります。国際対応が必要なら、locale や専用ライブラリを使い、f 文字列は最終表示整形として使うのが安全です。
まとめ
f 文字列は「コードを短く、意図を明確に」できる強力な整形機能です。変数・式の直埋め込み、書式指定での桁・寄せ・区切り、デバッグに効く {var=} と !r を押さえると、日常の表示・ログが一気に洗練されます。多行テンプレートや日時フォーマットも自然に書けるため、まずは f 文字列を標準の整形手段として使い、複雑な式は変数へ分解して読みやすさを優先しましょう。
