Python初心者でも安心!f文字列、str.format、テンプレート文字列を使いこなそう
f文字列(フォーマット済み文字列リテラル)
Python 3.6以降で導入されたf文字列は、最も新しく、シンプルで強力なテンプレート文字列形式です。
構文
f"{expression} {expression} ..."
例
name = "山田 太郎"
age = 30
message = f"私の名前は {name} です。年齢は {age} 歳です。"
print(message)
出力
私の名前は 山田 太郎 です。年齢は 30 歳です。
利点
- PEP 508で正式に仕様化
- 複雑なフォーマットにも対応
- 式を直接埋め込める
- シンプルで分かりやすい構文
欠点
- Python 3.6以降でのみ利用可能
str.format() メソッド
str.format()メソッドは、Python 3.0以降で使用できるテンプレート文字列形式です。
構文
"{0} さん、{1} 歳ですね。".format(name, age)
例
name = "山田 太郎"
age = 30
message = "{0} さん、{1} 歳ですね。".format(name, age)
print(message)
出力
山田 太郎 さん、30 歳ですね。
利点
- 辞書を用いた柔軟なフォーマットが可能
- Python 3.0以降で使用可能
欠点
- 複雑なフォーマットでは見づらくなる
- f文字列に比べて構文が冗長
Python 2.xで使用されていたテンプレート文字列形式です。
構文
"$name さん、$age 歳ですね。"
例
name = "山田 太郎"
age = 30
message = "$name さん、$age 歳ですね。"
print(message)
出力
$name さん、$age 歳ですね。
利点
- シンプルな構文
- Python 2.xで使用可能
欠点
- 複雑なフォーマットには不向き
- Python 3.xでは非推奨
テンプレート文字列は、Pythonにおけるテキスト処理をより効率的で分かりやすくする強力なツールです。
- Python 2.xを使用している場合は、テンプレート文字列(
$
記法)が使えますが、Python 3.xへの移行を検討してください。 - Python 3.0以前であれば、str.format()メソッドが汎用性が高いです。
- Python 3.6以降であれば、f文字列が最も簡潔でおすすめです。
# 名前と年齢を変数に格納
name = "山田 太郎"
age = 30
# f文字列を使って挨拶メッセージを作成
greeting = f"こんにちは、{name}さん!{age}歳ようこそ!"
# メッセージを表示
print(greeting)
# 名前と年齢を変数に格納
name = "佐藤 花子"
age = 25
# str.format()メソッドを使って挨拶メッセージを作成
greeting = "{name}さん、{age}歳ですね。ようこそ!".format(name=name, age=age)
# メッセージを表示
print(greeting)
このコードでは、str.format()メソッドを使って、名前と年齢を埋め込んだ挨拶メッセージを作成しています。str.format()メソッドは、辞書を用いた柔軟なフォーマットが可能で、キーと値を明確に指定したい場合に適しています。
# 名前と年齢を変数に格納
name = "鈴木 次郎"
age = 40
# テンプレート文字列(`$` 記法)を使って挨拶メッセージを作成
greeting = "$name さん、$age 歳です。はじめまして!"
# メッセージを表示 (Python 2.xのみ)
print(greeting)
このコードでは、テンプレート文字列($
記法)を使って、名前と年齢を埋め込んだ挨拶メッセージを作成しています。テンプレート文字列($
記法)は、Python 2.xでのみ使用可能で、シンプルな構文ですが、複雑なフォーマットには不向きです。
上記で紹介したテンプレート文字列に加え、フォーマットオプションを用いて、数値や文字列の書式をより詳細に制御することができます。
# 名前、年齢、身長を変数に格納
name = "田中 五郎"
age = 35
height = 1.75
# f文字列とフォーマットオプションを使って挨拶メッセージを作成
greeting = f"{name}さん、{age}歳、身長{height:.2f}mですね!"
# メッセージを表示
print(greeting)
文字列連結
シンプルな文字列連結であれば、プラス演算子(+
)を用いて行うことができます。
name = "山田 太郎"
age = 30
message = "私の名前は " + name + " です。年齢は " + str(age) + " 歳です。"
print(message)
format() メソッド
Python標準ライブラリの str.format()
メソッドを使用することもできます。
name = "佐藤 花子"
age = 25
message = "私は{}さん、{}歳です。".format(name, age)
print(message)
パーセントフォーマット(旧式)
Python 2.xで使用されていた、パーセント記号(%
)を用いたフォーマット方法です。
name = "鈴木 次郎"
age = 40
message = "私は%sさん、%d歳です。" % (name, age)
print(message)
専用ライブラリ
Jinja2などのテンプレートエンジンライブラリを使用すると、より複雑なテンプレート処理を行うことができます。
例:Jinja2
import jinja2
# テンプレートを読み込む
template = jinja2.Template("私の名前は {{ name }} です。年齢は {{ age }} 歳です。")
# 変数をテンプレートに渡す
context = {"name": "田中 五郎", "age": 35}
# テンプレートをレンダリングする
message = template.render(context)
# メッセージを表示
print(message)
方法 | 利点 | 欠点 |
---|---|---|
文字列連結 | シンプル | 複雑なフォーマットには不向き |
format() メソッド | 柔軟性 | やや冗長 |
パーセントフォーマット | 旧式 | 非推奨 |
専用ライブラリ | 複雑なテンプレート処理に適している | 導入が必要 |