概要

Pythonで文字列フォーマットを行う方法は、主に3種類あります。それぞれに利点があり、用途に応じて選択が可能です。以下では、% 演算子、str.format(), そして f-string の違いや使いどころについて詳しく説明します。

% 演算子によるフォーマット

古くから使われているフォーマット方法で、シンプルな記法が特徴です。特に軽量なスクリプトには今でも使用されますが、柔軟性が低く、複数の変数を扱う際にはやや不便です。

name = "Alice"
print("Hello, %s!" % name)  # Hello, Alice!

利点

  • シンプルで直感的。
  • 変数が少ない場合や簡単なフォーマットには便利。

欠点

  • 複雑なフォーマットには不向き。
  • タプルや辞書を使う場合は追加の操作が必要。

str.format() メソッド

Python 2.6以降で導入された str.format() は、より柔軟なフォーマットを可能にします。位置指定やキーワード引数を使ったフォーマットが可能で、複雑なテンプレートにも対応できます。

name = "Alice"
age = 30
print("Name: {0}, Age: {1}".format(name, age))  # Name: Alice, Age: 30

利点

  • 位置指定や名前指定が可能で、複雑なフォーマットに強い。
  • 可読性が高く、リストや辞書との相性が良い。

欠点

  • 記述が長くなることがある。
  • パフォーマンスはf-stringに劣る。

f-string (フォーマット文字列リテラル)

Python 3.6以降で導入されたf-stringは、現在最も推奨されるフォーマット方法です。f"..." の中に直接変数や式を埋め込むことができ、シンプルかつ効率的です。

name = "Alice"
age = 30
print(f"Name: {name}, Age: {age}")  # Name: Alice, Age: 30

利点

  • 他の方法よりも高速で効率的。
  • 変数や式を簡単に埋め込めるため、可読性が高い。

欠点

  • Python 3.6以降でしか使用できない。
  • コードの中に式が多くなると、複雑さが増す可能性がある。

パフォーマンス比較

f-stringはパフォーマンスの面でも優れており、大量の文字列処理を行う場合は、% 演算子や str.format() よりも高速です。特にリアルタイム性が求められる場面ではf-stringが推奨されます。

# パフォーマンステスト例
import timeit
timeit.timeit('name = "Alice"; f"Hello {name}!"', number=1000000)

結論

  • % 演算子: 簡単なフォーマットに適しており、歴史的な理由で依然として使われています。
  • str.format(): 柔軟性が高く、位置指定や複雑なフォーマットが可能です。
  • f-string: Python 3.6以降で最も推奨される方法。シンプルで効率的、かつ可読性が高いのが特徴です。