Python f文字列とは?変数を文字列に埋め込む新しい方法

Python初心者向けにf文字列(f-string)の使い方を詳しく解説。変数の埋め込み方、フォーマット指定、従来の方法との比較を実例とともに説明します。

プログラミング初心者ガイド
23 分で読めます

Python f文字列とは?変数を文字列に埋め込む新しい方法

みなさん、Pythonで文字列に変数を入れたい時、どうしていますか?

「文字列と変数を組み合わせるのって面倒」 「もっと簡単に変数を埋め込みたい」 「f文字列って聞いたことあるけど、どう使うの?」

こんな疑問、よくありますよね。

実は、Python 3.6から**f文字列(f-string)**という画期的な機能が追加されました。 これを使えば、変数や式を文字列に簡潔に埋め込むことができるんです。

この記事では、Python初心者の方向けにf文字列の基本から応用まで、分かりやすく解説します。 従来の方法と比べて読みやすく、書きやすく、しかも高速という優れもの!

一緒にf文字列をマスターして、もっと楽にプログラミングできるようになりましょう!

f文字列って何?

**f文字列(f-string)**は、文字列の前にfを付けることで、波括弧{}内に変数や式を直接記述できるPython 3.6以降の文字列フォーマット機能です。

簡単に言うと、「文字列に変数をペタッと貼り付けられる便利な機能」です。

基本的な書き方

まずは、シンプルな例から見てみましょう。

name = "田中"
age = 25
# f文字列を使用
message = f"私の名前は{name}で、年齢は{age}歳です"
print(message)

このコードを実行すると、こうなります。

私の名前は田中で、年齢は25歳です

すごく簡単ですよね! 文字列の前にfを付けて、波括弧{}内に変数名を書くだけです。 変数の値が自動的に埋め込まれます。

従来の方法との比較

f文字列の便利さを実感するために、従来の方法と比較してみましょう。

1. %演算子を使った方法(古い方法)

name = "田中"
age = 25
# %演算子(もう推奨されていません)
message = "私の名前は%sで、年齢は%d歳です" % (name, age)
print(message)

これは古い方法です。 %s%dといった記号を覚える必要があって、ちょっと面倒ですね。

2. format()メソッドを使った方法

name = "田中"
age = 25
# format()メソッド
message = "私の名前は{}で、年齢は{}歳です".format(name, age)
print(message)
# または
message = "私の名前は{name}で、年齢は{age}歳です".format(name=name, age=age)
print(message)

format()メソッドは%演算子より読みやすいですが、まだちょっと長いです。

3. f文字列を使った方法(推奨)

name = "田中"
age = 25
# f文字列(最も推奨される方法)
message = f"私の名前は{name}で、年齢は{age}歳です"
print(message)

f文字列が一番シンプルで分かりやすいですね!

変数名がそのまま文字列の中に見えるので、どこに何が入るかが一目瞭然です。 パフォーマンスも一番優秀なんです。

f文字列の基本的な使い方

それでは、f文字列の基本的な使い方を詳しく見てみましょう。

変数の埋め込み

商品情報を表示する例です。

product_name = "ノートパソコン"
price = 89800
stock = 15
print(f"商品名: {product_name}")
print(f"価格: {price:,}円")
print(f"在庫数: {stock}個")

実行すると、こうなります。

商品名: ノートパソコン 価格: 89,800円 在庫数: 15個

{price:,}の部分で、数字にカンマ区切りを付けています。 後で詳しく説明しますが、こんなふうにフォーマットも指定できるんです。

式の計算結果を埋め込み

変数だけでなく、計算式の結果も直接埋め込めます。

length = 5
width = 3
print(f"長方形の面積: {length * width}平方メートル")
print(f"長方形の周囲: {2 * (length + width)}メートル")

実行結果はこちらです。

長方形の面積: 15平方メートル 長方形の周囲: 16メートル

波括弧の中で直接計算できるのは便利ですね!

関数の戻り値を埋め込み

関数の実行結果も埋め込めます。

import datetime
def get_current_time():
return datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M:%S")
def calculate_tax(price, tax_rate=0.1):
return int(price * tax_rate)
price = 1000
print(f"現在時刻: {get_current_time()}")
print(f"商品価格: {price}円(税込: {price + calculate_tax(price)}円)")

実行結果の例はこちらです。

現在時刻: 2024年07月07日 14:30:15 商品価格: 1000円(税込: 1100円)

関数を波括弧の中で呼び出して、その結果を直接埋め込めるんです。

数値のフォーマット指定

f文字列では、数値の表示方法を細かく指定できます。

桁数指定と0埋め

数字の桁数を揃えたい時に便利です。

number = 42
print(f"基本: {number}")
print(f"3桁0埋め: {number:03d}")
print(f"5桁0埋め: {number:05d}")

実行結果はこちらです。

基本: 42 3桁0埋め: 042 5桁0埋め: 00042

{number:03d}:03dの部分がフォーマット指定です。 「3桁で、足りない部分は0で埋める」という意味です。

小数点の桁数指定

小数点以下の桁数も指定できます。

pi = 3.14159265
print(f"基本: {pi}")
print(f"小数点2桁: {pi:.2f}")
print(f"小数点4桁: {pi:.4f}")

実行結果はこちらです。

基本: 3.14159265 小数点2桁: 3.14 小数点4桁: 3.1416

{pi:.2f}:.2fで「小数点以下2桁まで表示」を指定できます。

千の位区切り

大きな数字を読みやすくするために、区切り文字を入れられます。

large_number = 1234567
print(f"区切りなし: {large_number}")
print(f"カンマ区切り: {large_number:,}")
print(f"アンダースコア区切り: {large_number:_}")

実行結果はこちらです。

区切りなし: 1234567 カンマ区切り: 1,234,567 アンダースコア区切り: 1_234_567

,_を使って、読みやすい形式にできます。

パーセント表示

割合をパーセントで表示することもできます。

success_rate = 0.856
print(f"小数: {success_rate}")
print(f"パーセント: {success_rate:.1%}")
print(f"パーセント(2桁): {success_rate:.2%}")

実行結果はこちらです。

小数: 0.856 パーセント: 85.6% パーセント(2桁): 85.60%

%を使うと、自動的に100倍してパーセント記号を付けてくれます。

文字列の配置とパディング

文字列の配置や空白の埋め方も指定できます。

左揃え、右揃え、中央揃え

文字列の位置を調整できます。

text = "Python"
print(f"左揃え(10文字): '{text:<10}'")
print(f"右揃え(10文字): '{text:>10}'")
print(f"中央揃え(10文字): '{text:^10}'")

実行結果はこちらです。

左揃え(10文字): 'Python ' 右揃え(10文字): ' Python' 中央揃え(10文字): ' Python '

<>^で左揃え、右揃え、中央揃えを指定できます。

パディング文字の指定

空白以外の文字で埋めることもできます。

text = "Hello"
print(f"星印パディング: '{text:*^15}'")
print(f"ハイフンパディング: '{text:-^15}'")
print(f"ドットパディング: '{text:.^15}'")

実行結果はこちらです。

星印パディング: '*****Hello*****' ハイフンパディング: '-----Hello-----' ドットパディング: '.....Hello.....'

見た目がかわいくできて便利ですね!

実用的なf文字列の活用例

実際の開発でよく使われるパターンを見てみましょう。

ユーザー情報の表示

社員一覧を整列して表示する例です。

users = [
{"name": "田中太郎", "age": 28, "department": "開発部"},
{"name": "佐藤花子", "age": 32, "department": "営業部"},
{"name": "鈴木一郎", "age": 45, "department": "管理部"}
]
print("社員一覧:")
print("-" * 40)
for i, user in enumerate(users, 1):
print(f"{i:2d}. {user['name']:<8} ({user['age']:2d}歳) - {user['department']}")

実行結果はこちらです。

社員一覧: ---------------------------------------- 1. 田中太郎 (28歳) - 開発部 2. 佐藤花子 (32歳) - 営業部 3. 鈴木一郎 (45歳) - 管理部

番号、名前、年齢がきれいに揃って表示されますね。

ファイルサイズの表示

ファイルサイズを適切な単位で表示する関数です。

def format_file_size(size_bytes):
if size_bytes < 1024:
return f"{size_bytes} B"
elif size_bytes < 1024 ** 2:
return f"{size_bytes / 1024:.1f} KB"
elif size_bytes < 1024 ** 3:
return f"{size_bytes / (1024 ** 2):.1f} MB"
else:
return f"{size_bytes / (1024 ** 3):.1f} GB"
file_sizes = [512, 2048, 1536000, 2147483648]
for size in file_sizes:
print(f"ファイルサイズ: {format_file_size(size)}")

実行結果はこちらです。

ファイルサイズ: 512 B ファイルサイズ: 2.0 KB ファイルサイズ: 1.5 MB ファイルサイズ: 2.0 GB

ファイルサイズが自動的に適切な単位で表示されて便利です。

進捗表示

プログレスバーを作る例です。

def show_progress(current, total):
percentage = (current / total) * 100
filled = int(percentage // 5) # 20個のバーで100%
bar = "█" * filled + "░" * (20 - filled)
return f"進捗: [{bar}] {percentage:5.1f}% ({current}/{total})"
# 進捗の例
tasks = [10, 25, 50, 75, 100]
total_tasks = 100
for completed in tasks:
print(show_progress(completed, total_tasks))

実行結果はこちらです。

進捗: [██░░░░░░░░░░░░░░░░░░] 10.0% (10/100) 進捗: [█████░░░░░░░░░░░░░░░░] 25.0% (25/100) 進捗: [██████████░░░░░░░░░░] 50.0% (50/100) 進捗: [███████████████░░░░░] 75.0% (75/100) 進捗: [████████████████████] 100.0% (100/100)

視覚的に進捗が分かって便利ですね!

デバッグ情報の出力

ユーザー情報を分かりやすく表示する例です。

# 使用例
username = "admin"
user_id = 12345
is_active = True
print(f"ユーザー情報:")
print(f" ユーザー名: {username}")
print(f" ユーザーID: {user_id}")
print(f" アクティブ: {'有効' if is_active else '無効'}")

実行結果はこちらです。

ユーザー情報: ユーザー名: admin ユーザーID: 12345 アクティブ: 有効

条件分岐も波括弧の中に書けるので便利です。

日付と時刻のフォーマット

日付や時刻も美しく表示できます。

import datetime
now = datetime.datetime.now()
birthday = datetime.date(1990, 5, 15)
print(f"現在日時: {now}")
print(f"年月日: {now:%Y年%m月%d日}")
print(f"時刻: {now:%H時%M分%S秒}")
print(f"曜日: {now:%A}")
print(f"誕生日: {birthday:%Y年%m月%d日}")

実行結果の例はこちらです。

現在日時: 2024-07-07 14:30:15.123456 年月日: 2024年07月07日 時刻: 14時30分15秒 曜日: Sunday 誕生日: 1990年05月15日

%Y%m%dなどのフォーマット指定子で、日付の表示形式を自由に変更できます。

辞書とリストでの活用

辞書やリストの値も簡単に埋め込めます。

辞書の値を参照

person = {
"name": "山田太郎",
"age": 30,
"city": "東京",
"job": "エンジニア"
}
print(f"{person['name']}さんは{person['age']}歳で、{person['city']}在住の{person['job']}です")

実行結果はこちらです。

山田太郎さんは30歳で、東京在住のエンジニアです

辞書のキーを指定して、値を直接埋め込めます。

リストのインデックス参照

colors = ["赤", "青", "緑", "黄", "紫"]
print(f"1番目の色: {colors[0]}")
print(f"最後の色: {colors[-1]}")
print(f"色の総数: {len(colors)}種類")

実行結果はこちらです。

1番目の色: 赤 最後の色: 紫 色の総数: 5種類

リストのインデックスや関数呼び出しも波括弧の中に書けます。

エラーハンドリングとの組み合わせ

例外処理と組み合わせた例も見てみましょう。

def safe_divide(a, b):
try:
result = a / b
return f"{a} ÷ {b} = {result:.2f}"
except ZeroDivisionError:
return f"エラー: {a} を 0 で割ることはできません"
except TypeError:
return f"エラー: 数値以外の値が入力されました ({type(a).__name__}, {type(b).__name__})"
# テスト
test_cases = [(10, 2), (10, 0), (10, "abc")]
for a, b in test_cases:
print(safe_divide(a, b))

実行結果はこちらです。

10 ÷ 2 = 5.00 エラー: 10 を 0 で割ることはできません エラー: 数値以外の値が入力されました (int, str)

エラーメッセージもf文字列で分かりやすく表示できます。

パフォーマンスの比較

f文字列がどれだけ高速か確認してみましょう。

import time
name = "Python"
version = "3.11"
iteration = 100000
# %演算子での測定
start_time = time.time()
for i in range(iteration):
result = "%s %s" % (name, version)
time_percent = time.time() - start_time
# format()での測定
start_time = time.time()
for i in range(iteration):
result = "{} {}".format(name, version)
time_format = time.time() - start_time
# f文字列での測定
start_time = time.time()
for i in range(iteration):
result = f"{name} {version}"
time_fstring = time.time() - start_time
print(f"パフォーマンス比較({iteration:,}回実行):")
print(f"% 演算子: {time_percent:.4f}秒")
print(f"format(): {time_format:.4f}秒")
print(f"f文字列: {time_fstring:.4f}秒")

実行結果の例はこちらです。

パフォーマンス比較(100,000回実行): % 演算子: 0.0523秒 format(): 0.0687秒 f文字列: 0.0312秒

f文字列が一番高速なことが分かりますね!

f文字列使用時の注意点

f文字列を使う時に気をつけるポイントがいくつかあります。

波括弧のエスケープ

波括弧を文字として表示したい場合は、二重にします。

value = 42
print(f"辞書形式: {{'key': {value}}}")
print(f"集合形式: {{{value}, {value + 1}, {value + 2}}}")

実行結果はこちらです。

辞書形式: {'key': 42} 集合形式: {42, 43, 44}

{{}}で、実際の波括弧を表示できます。

バックスラッシュの制限

f文字列の波括弧内では、バックスラッシュが使えません。

# f文字列内でバックスラッシュは使用できない
path = "C:\\Users\\Documents"
# print(f"パス: {path + "\\file.txt"}") # エラー
# 正しい方法
file_name = "file.txt"
full_path = f"{path}\\{file_name}"
print(f"パス: {full_path}")

実行結果はこちらです。

パス: C:\Users\Documents\file.txt

バックスラッシュが必要な場合は、事前に変数に入れておきましょう。

複雑な式の可読性

あまりに複雑な式は読みにくくなります。

# 複雑すぎる式は避ける(悪い例)
data = [1, 2, 3, 4, 5]
# print(f"結果: {sum([x**2 for x in data if x % 2 == 0])}")
# 読みやすくする(良い例)
even_squares = [x**2 for x in data if x % 2 == 0]
result = sum(even_squares)
print(f"偶数の二乗の合計: {result}")

実行結果はこちらです。

偶数の二乗の合計: 20

複雑な計算は事前に変数に入れて、コードを読みやすくしましょう。

まとめ

f文字列は、Python 3.6以降で利用できる最も推奨される文字列フォーマット方法です。

今回学んだポイントをおさらい

f文字列の利点

  • 読みやすさ: 変数や式が直接文字列内に記述される
  • 書きやすさ: 最小限の構文で変数を埋め込める
  • 高速性: 従来の方法より実行速度が速い
  • 柔軟性: 豊富なフォーマットオプション

主な機能

  • 変数埋め込み: f"{variable}"
  • 式の計算: f"{x + y}"
  • 関数呼び出し: f"{function()}"
  • フォーマット指定: f"{number:,.2f}"
  • 配置制御: f"{text:^10}"

便利なフォーマット指定

  • 数値の0埋めや桁数指定
  • 小数点以下の桁数制御
  • 千の位区切り(カンマやアンダースコア)
  • パーセント表示
  • 文字列の配置(左右中央揃え)

実用的な活用例

  • ユーザー情報の整列表示
  • ファイルサイズの適切な単位表示
  • 進捗バーの作成
  • 日付と時刻の美しい表示
  • デバッグ情報の出力

使用上の注意

  • 波括弧のエスケープ: {{}}で表現
  • バックスラッシュ: f文字列内では直接使用不可
  • 可読性: 複雑な式は事前に変数に格納

f文字列をマスターすることで、より直感的で保守しやすいPythonコードが書けるようになります。

まずは基本的な変数埋め込みから始めて、徐々にフォーマット指定や応用的な使い方も覚えていきましょう。 コードがスッキリして、読みやすくなりますよ!

ぜひ今日からf文字列を使って、もっと楽しくプログラミングしてみてくださいね。

関連記事