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() メソッド柔軟性やや冗長
パーセントフォーマット旧式非推奨
専用ライブラリ複雑なテンプレート処理に適している導入が必要