Pythonで文字列を組み立てるとき、避けて通れないのがformat()
関数です。
数字や変数を文字列に埋め込んだり、フォーマットを整えたりするのに非常に便利なこの機能ですが、初めのうちは「{}」や引数の使い方が分かりづらく感じる方も多いでしょう。
この記事では、基本的な使い方から応用テクニック、最近主流になってきたf文字列との違いまでを、具体例とともに丁寧に解説します。Python初心者の方はもちろん、もう一度基礎を固めたい中級者の方にも役立つ内容になっています。
format関数とは?
Pythonのformat()
関数は、文字列に変数の値を埋め込むための手法の一つです。{}
(プレースホルダ)を使って、そこに指定された値を挿入できます。
name = "Alice"
age = 30
print("名前は{}で、年齢は{}歳です。".format(name, age))
# 出力: 名前はAliceで、年齢は30歳です。
このように、{}
の順番に従って変数を並べることで、可読性の高いコードを書くことができます。
インデックス番号を使った書き方
複雑な文で、同じ変数を複数回使う場合は、プレースホルダに番号をつけて明示することができます。
print("{0}は{1}歳です。{0}の趣味はプログラミングです。".format("Bob", 25))
# 出力: Bobは25歳です。Bobの趣味はプログラミングです。
このようにすれば、同じ文字列を何度も繰り返し書かなくてもよくなります。
キーワード引数を使う
引数に名前をつけることで、より直感的にフォーマットを記述することが可能です。
print("名前は{name}で、職業は{job}です。".format(name="Charlie", job="エンジニア"))
# 出力: 名前はCharlieで、職業はエンジニアです。
キーワード引数は、辞書形式のデータとも相性が良く、次のように使えます。
data = {"name": "Diana", "job": "デザイナー"}
print("名前は{name}、職業は{job}".format(**data))
数値フォーマットの指定
数値を桁揃えしたり、小数点以下の桁数を指定したりしたい場合にもformat()
は便利です。
# 小数点2桁まで表示
print("円周率は{:.2f}です。".format(3.141592))
# 出力: 円周率は3.14です。
# 整数を3桁ゼロ埋めで表示
print("IDは{:03d}です。".format(7))
# 出力: IDは007です。
その他、桁区切りやパーセント表示も可能です。
print("売上: {:,}円".format(1234567)) # 桁区切り
# 出力: 売上: 1,234,567円
print("進捗: {:.1%}".format(0.87)) # パーセント表示
# 出力: 進捗: 87.0%
アラインメント(揃え方)の指定
文字列や数値の配置も指定できます。
print("{:<10}".format("左寄せ")) # 左寄せ(10文字幅)
print("{:^10}".format("中央")) # 中央揃え
print("{:>10}".format("右寄せ")) # 右寄せ
また、空いた部分を特定の文字で埋めることもできます。
print("{:*^10}".format("強調")) # 出力: **強調****
辞書やリストを利用したformat
format()
は辞書やリストからデータを取り出すのにも使えます。
info = {"name": "Eve", "age": 29}
print("名前: {0[name]} 年齢: {0日付未入力}".format(info))
# 出力: 名前: Eve 年齢: 29
items = ["りんご", "バナナ", "ぶどう"]
print("果物1: {0[0]}, 果物2: {0[1]}".format(items))
このように、インデックスやキーを使ってデータを呼び出せます。
formatとf文字列の違い
Python 3.6以降では「f文字列(フォーマット済み文字列)」が登場し、より直感的に文字列を構築できるようになりました。
name = "Frank"
age = 40
print(f"名前は{name}で、年齢は{age}歳です。")
f文字列は読みやすさと簡潔さで優れていますが、Python 3.6未満では使えない点に注意が必要です。
また、formatの方が複雑な処理(多言語対応や複数書式の使い分け)に強い場面もあります。
format関数を使うメリット
- Python 2.xでも動作する(f文字列は不可)
- 数値や文字列の整形が柔軟にできる
- 辞書やリストとの相性が良い
- プレースホルダの順番やラベルを明示できる
よくあるエラーと注意点
プレースホルダの数と引数の数が合わない
print("名前: {}, 年齢: {}".format("George"))
# エラー: IndexError: tuple index out of range
→ 対応する値がすべて揃っているか確認しましょう。
フォーマット指定子のミス
print("{:.2d}".format(3.14))
# エラー: ValueError: Unknown format code 'd' for object of type 'float'
→ d
は整数専用。浮動小数点数にはf
を使います。
まとめ
Pythonのformat()
関数は、文字列の中に変数をスマートに埋め込むための強力なツールです。
基本の使い方から数値フォーマット、アラインメント、辞書やリストの活用まで幅広く対応可能で、プログラムの可読性と保守性を高めてくれます。
最近ではf文字列の普及もありますが、場面によってはformat()
の方が柔軟性に優れている場合もあります。
状況に応じて使い分けるスキルを身につけることで、より美しいPythonコードを書くことができるでしょう。