Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの文字列フォーマット徹底比較:%演算子とformat()メソッドの違い

%演算子の落とし穴:変数とタプルの扱い

Pythonの%演算子(printf形式のフォーマット)は、変数単体でもタプルでも受け取ることができます。その分、意図した動作をさせるためには、非常に明示的な書き方が求められます。

コード例

たとえば、次のようにタプルをそのまま渡してみます。

my_tuple = (1, 2, 3)
"My tuple: %s" % my_tuple

多くの人は、このコードから次のような出力を期待するでしょう。

My tuple: (1, 2, 3)

実際の出力結果

しかし、実際に実行すると TypeError が発生します。これは、Pythonがタプルの中身を複数のフォーマット引数として展開しようとするためです。常に期待どおりの結果を得るには、引数を「要素が1つのタプル」として明示的に渡す必要があります。

"hi there %s" % (name,)  # 単一の引数を要素1つのタプルとして渡す

末尾のカンマひとつで動作が変わる、といった仕様の細かい注意点を毎回覚えておくのは容易ではありませんし、見逃せばバグの原因にもなりかねません。

.format()メソッドのメリット

一方、.format() メソッドには、上記のようなタプル展開による落とし穴が存在しません。引数の型を意識せずに済むため、コードのミスを防ぎやすくなります。また、プレースホルダー {} を使う記述は視覚的にもすっきりしており、可読性の面でも % 演算子より優れています。

"My tuple: {}".format(my_tuple)  # タプルをそのまま渡してもOK
# 出力: My tuple: (1, 2, 3)

補足:f文字列(f-string)という現代的な選択肢

なお、Python 3.6以降では、より簡潔で高速なf文字列(f-string)が利用できます。変数を直接埋め込めるため、現在のPython開発では最も推奨される書き方となっています。

name = "Alice"
print(f"hi there {name}")  # 出力: hi there Alice

まとめると、レガシーコードの保守では % 演算子の挙動を理解しておくことが重要ですが、新しくコードを書く場合は .format() やf文字列を使うことで、安全で読みやすい文字列フォーマットを実現できます。

  1. 【保存版】PowerPointのフォーマットペインタでテキスト書式を一括コピーする方法

    PowerPointでテキストを編集するとき、「フォントサイズを大きくして、色を変えて、さらに斜体にする」といったように、複数の書式設定を組み合わせて変更した経験はありませんか? せっかく整えたその書式を、ほかのテキストにも同じように適用したい場合、一つひとつの設定を手作業で繰り返すのは非常に面倒です。そんなときに便利なのがフォーマットペインタ(書式のコピー/貼り付け)です。この機能を使えば、フォントサイズ・色・スタイルなどの書式情報をまとめてコピーし、別のテキストにワンアクションで適用できます。対応バージョンこの記事で紹介する手順は、PowerPoint 2019、2016、2013、201

  2. Pythonで文字列が特定のサブ文字列(プレフィックス)で始まるかどうかを確認する方法

    startswith()メソッドを使う方法 Pythonでは、文字列クラスに標準で用意されているstartswith()メソッドを使うことで、文字列が指定したプレフィックス(接頭辞)で始まるかどうかを簡単に確認できます。このメソッドは、検索したいプレフィックス文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。戻り値は真偽値(True / False)です。 >>> hello world.startswith(hell) True >>> Harry Potter.startswith(Harr) True >>> hel