Pythonで文字列の中に変数を埋め込みたいとき、どのような方法を使っていますか?古くから使われてきた%演算子やformat()メソッドに比べ、f文字列(f-string)は直感的でシンプルな書き方ができることから、現代のPythonプログラミングでは主流の方法となっています。
フォーマット済み文字列リテラルとも呼ばれるf-stringは、Python 3.6から導入された機能です。変数埋め込みや式展開、小数点のフォーマットなど、幅広い用途に対応しており、コードの可読性を大きく高めてくれます。
この記事では、f文字列の基本的な書き方から応用的なフォーマット指定まで、サンプルコードを交えながらわかりやすく解説していきます。初めてf-stringに触れる方も、より深く使いこなしたい方もぜひ参考にしてください。
Pythonのf文字列はフォーマット済み文字列リテラルの最もシンプルな書き方
それではまず、f文字列の基本概念と基本的な書き方について解説していきます。
f文字列とは、文字列の先頭に「f」または「F」をつけることで、文字列の中に変数や式を直接埋め込めるPython独自の構文です。波括弧{}の中に変数名や式を書くだけで、実行時に自動的に値へと展開されます。
最も基本的な書き方を見てみましょう。
# f文字列の基本的な書き方
name = "ゴリラ"
age = 5
result = f"{name}の年齢は{age}歳です。"
print(result)
# 出力結果:ゴリラの年齢は5歳です。
文字列の前に「f」をつけ、埋め込みたい変数を{}で囲むだけで完成です。非常にシンプルな構文でありながら、可読性が高いのがf-stringの魅力といえるでしょう。
f文字列と他のフォーマット方法の比較
Pythonには文字列フォーマットの方法が複数あります。それぞれの書き方を比較してみましょう。
| 方法 | 書き方の例 | 特徴 |
|---|---|---|
| %演算子 | “%s is %d” % (name, age) | 古い書き方・型指定が必要 |
| format()メソッド | “{} is {}”.format(name, age) | 柔軟だが記述が長くなりがち |
| f文字列 | f”{name} is {age}” | 簡潔・可読性が高い・推奨 |
3つの方法の中でf文字列が最も直感的で読みやすい書き方です。新しく書くコードにはf-stringを使うのがおすすめです。
# 3つの方法を比較
item = "アボカド"
price = 298
# %演算子
print("%sの価格は%d円です。" % (item, price))
# format()メソッド
print("{}の価格は{}円です。".format(item, price))
# f文字列
print(f"{item}の価格は{price}円です。")
# 出力結果:アボカドの価格は298円です。
# 出力結果:アボカドの価格は298円です。
# 出力結果:アボカドの価格は298円です。
出力結果は同じですが、f文字列の書き方が最もスッキリしていることがわかります。
f文字列でシングルクォートとダブルクォートを使う
f文字列はシングルクォートでもダブルクォートでも記述できます。
# シングルクォートとダブルクォートどちらでもOK
product = "キーボード"
print(f"{product}は便利なアイテムです。") # ダブルクォート
print(f'{product}は便利なアイテムです。') # シングルクォート
# 出力結果:キーボードは便利なアイテムです。
# 出力結果:キーボードは便利なアイテムです。
プロジェクトやチームのコーディングスタイルに合わせて統一して使うのがよいでしょう。
複数行のf文字列を書く方法
長い文字列を複数行に渡って書きたい場合は、トリプルクォートと組み合わせることができます。
# 複数行のf文字列
name = "ドラゴンフルーツ"
color = "ピンク"
taste = "甘酸っぱい"
description = f"""
{name}の特徴:
色:{color}
味:{taste}
"""
print(description)
# 出力結果:
# ドラゴンフルーツの特徴:
# 色:ピンク
# 味:甘酸っぱい
トリプルクォートを使うことで、改行を含む長い文字列もそのまま記述できます。レポートやメッセージの整形に役立つパターンです。
f文字列で式展開と計算を行う方法
続いては、f文字列の{}の中で式を展開したり、計算を行ったりする方法を確認していきます。
f文字列の{}には変数だけでなく、Pythonの式であれば何でも記述できます。四則演算、関数呼び出し、三項演算子など、柔軟な使い方が可能です。
計算式を直接埋め込む方法
{}の中に計算式をそのまま書くと、結果が展開されます。
# 計算式を埋め込む
weight = 3.5 # サーモンの重さ(kg)
price_per_kg = 1200
print(f"サーモン{weight}kgの合計金額は{weight * price_per_kg}円です。")
# 出力結果:サーモン3.5kgの合計金額は4200.0円です。
変数に代入してから使う必要がなく、そのまま式を書けるのでコードがすっきりします。
関数やメソッドを呼び出す方法
{}の中で関数やメソッドを直接呼び出すことも可能です。
# 関数・メソッドの呼び出し
animal = "gorilla"
items = ["ネジ", "ボルト", "ワッシャー"]
print(f"動物名(大文字):{animal.upper()}")
print(f"アイテム数:{len(items)}個")
print(f"最初のアイテム:{items[0]}")
# 出力結果:動物名(大文字):GORILLA
# 出力結果:アイテム数:3個
# 出力結果:最初のアイテム:ネジ
文字列メソッドのupper()やlower()、len()などの組み込み関数もそのまま使えます。
三項演算子を使った条件分岐
{}の中で三項演算子を使うと、条件によって埋め込む値を切り替えることができます。
# 三項演算子との組み合わせ
score = 75
result = f"スコア{score}点:{'合格' if score >= 60 else '不合格'}"
print(result)
# 出力結果:スコア75点:合格
if-elseの三項演算子を{}の中に記述することで、シンプルな条件分岐をインラインで表現できます。複雑な分岐には適しませんが、簡単な判定には便利でしょう。
f文字列でフォーマット指定をする方法
続いては、f文字列でより細かい表示フォーマットを指定する方法を確認していきます。
f文字列では、{}の中でコロン「:」に続けてフォーマット指定子を記述することで、小数点の桁数・ゼロ埋め・整列・カンマ区切りなど、様々な表示形式を制御できます。
| フォーマット指定 | 書き方 | 内容 |
|---|---|---|
| 小数点桁数指定 | {変数:.2f} | 小数点以下2桁で表示 |
| ゼロ埋め | {変数:05d} | 5桁になるようゼロで埋める |
| カンマ区切り | {変数:,} | 3桁ごとにカンマを挿入 |
| 左揃え | {変数:<10} | 10文字幅で左揃え |
| 右揃え | {変数:>10} | 10文字幅で右揃え |
| パーセント表示 | {変数:.1%} | パーセント形式で表示 |
小数点のフォーマットを指定する方法
数値の小数点以下の桁数を揃えたい場合は、:.nfの形式を使います。
# 小数点フォーマット
pi = 3.141592653589793
print(f"円周率(2桁):{pi:.2f}")
print(f"円周率(4桁):{pi:.4f}")
weight = 1.5
print(f"アボカドの重さ:{weight:.3f}kg")
# 出力結果:円周率(2桁):3.14
# 出力結果:円周率(4桁):3.1416
# 出力結果:アボカドの重さ:1.500kg
:.2fのように「.(桁数)f」と指定するだけで、表示桁数を統一できます。数値を扱う場面では特によく使われるフォーマットです。
カンマ区切りとゼロ埋めの使い方
大きな数値の可読性を高めるカンマ区切りや、コード番号などに使うゼロ埋めも簡単に指定できます。
# カンマ区切りとゼロ埋め
revenue = 12345678
item_id = 42
print(f"売上金額:{revenue:,}円")
print(f"商品ID:{item_id:06d}")
# 出力結果:売上金額:12,345,678円
# 出力結果:商品ID:000042
カンマ区切りは「:,」、ゼロ埋めは「:0(桁数)d」と指定します。データを見やすく整形するときに重宝するでしょう。
文字列の整列と幅指定をする方法
テーブル形式で出力したいときなど、文字列の幅を揃えて整列させることもできます。
# 文字列の整列
products = [("ネジ", 50), ("ボルト", 120), ("キーボード", 8500)]
for name, price in products:
print(f"{name:<10} : {price:>6}円")
# 出力結果:ネジ : 50円
# 出力結果:ボルト : 120円
# 出力結果:キーボード : 8500円
左揃えは「:<(幅)」、右揃えは「:>(幅)」で指定します。リストや商品一覧を整形して出力するときに非常に便利なパターンです。
f文字列の応用テクニックと注意点
続いては、f文字列をより実践的に使いこなすための応用テクニックと、使用時の注意点を確認していきます。
基本的な使い方をマスターしたら、デバッグに役立つ=演算子や、ネストされた波括弧の使い方なども知っておくとコーディングがより快適になります。
デバッグに便利な「=」を使う方法
Python 3.8以降では、f文字列の{}の中に「=」を加えると、変数名と値を同時に出力できます。
# デバッグ用の = 表記(Python 3.8以降)
temperature = 36.5
humidity = 78
print(f"{temperature=}")
print(f"{humidity=}")
x = 10
y = 20
print(f"{x + y = }")
# 出力結果:temperature=36.5
# 出力結果:humidity=78
# 出力結果:x + y = 30
変数名と値が一緒に出力されるため、デバッグ時にどの変数がどの値かを確認しやすくなります。print文を使ったデバッグをよく行う方には特に便利でしょう。
f文字列の中で波括弧を表示する方法
f文字列の中で「{」「}」という文字自体を表示したい場合は、二重にして「{{」「}}」と記述します。
# 波括弧を文字として表示する
key = "color"
value = "red"
print(f"辞書の例:{{{key}: {value}}}")
print(f"フォーマット:{{変数名}}")
# 出力結果:辞書の例:{color: red}
# 出力結果:フォーマット:{変数名}
JSONやコードのサンプルを含む文字列を生成するときなど、波括弧をエスケープする方法として覚えておきましょう。
f文字列使用時の注意点
f文字列を使う上でいくつか注意すべき点があります。
# 注意点1:バックスラッシュは{}の中に使えない(Python 3.11以前)
fruits = ["アボカド", "ドラゴンフルーツ"]
separator = ", "
result = f"フルーツ:{separator.join(fruits)}"
print(result)
# 注意点2:同じクォートを{}の中で使うと構文エラーになる
name = "サーモン"
# print(f"{"name"}") # エラーになる
print(f"{name!r}") # repr形式で出力する場合
# 出力結果:フルーツ:アボカド, ドラゴンフルーツ
# 出力結果:'サーモン'
Python 3.12以降ではこれらの制限が緩和されていますが、幅広い環境での動作を考慮するなら、複雑な処理は変数に切り出してから埋め込む方が安全です。
まとめ
この記事では、Pythonのf文字列(フォーマット済み文字列リテラル)について、基本的な書き方から式展開・フォーマット指定・応用テクニックまで幅広く解説しました。
f文字列は「fを先頭につけて{}の中に変数や式を書く」というシンプルな構文で、%演算子やformat()メソッドと比べてコードが短く読みやすくなります。小数点の桁数指定やカンマ区切り、文字列の整列なども「:」に続けて指定するだけで簡単に実現できます。
Python 3.8以降のデバッグ用「=」表記や、波括弧を文字として表示する「{{}}」の書き方など、実践的なテクニックも合わせて活用してみてください。
今回紹介したサンプルコードを実際に動かしながら、f文字列の使い方をしっかり身につけてみてください。