Python | 文法の基本:f 文字列

Python
スポンサーリンク

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 文字列を標準の整形手段として使い、複雑な式は変数へ分解して読みやすさを優先しましょう。

タイトルとURLをコピーしました