CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
こんにちは、菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。
前回は、文字列リテラルやraw文字列を通して、Pythonにおける文字列の書き方について学びました。
今回は、文字列の中に値を埋め込んだり、表示を整形したりするための仕組みである文字列フォーマットと、文字列フォーマットの手法のひとつであるf-stringについて学びたいと思います。
プログラムを書いていく中で文字列と数値の両方を同時に処理したり、表示させたり、計算式で出てきた値に%をつけたりというような文字列を操作しなければならないことがあります。
例えば「私の名前は(変数1)で、年齢は(変数2)才です。」という文章を表示させたい場合、文字列と数値の両方が出てきます。ですが、数値をそのまま文字列と結合することはできないため、文字列として扱える形に変換するか、文字列フォーマットをする必要があります。
こうした「文字列の中に値を埋め込み、表示用に整形する」ための機能を文字列フォーマットといいます。文字列フォーマットを使えば、数値の変換は自動で行われます。
文字列フォーマットには現時点で演算子の「%」を使うもの、str.format()、f-stringの3つがあります。
◆Pythonの文字列フォーマット手法(2026年2月時点)
| 手法 | 記述例 | 現在の位置づけ | 備考 |
|---|---|---|---|
| % (演算子) | "x=%d" % x | 旧式、保守で使う程度 | 初期から存在。新規制作での使用は非推奨 |
| str.format() | "x={}".format(x) | 汎用性が高いので安定ポジション | 2.6で追加され、3.x台でも継続 |
| f-string | f"x={x}" | 主流 | 3.6で追加された |
補足)新しい文字列フォーマット t-string
ちなみに、2025年10月にリリースされたPython3.14で、t-stringという機能が追加されました。
この機能は文字列をテンプレート構造のまま保持して、後で値を埋め込んだり、安全に処理したりといったことが可能になる機能だそうです。クロスサイトスクリプティングなどの攻撃を防ぐ安全なテンプレート生成やテンプレートエンジンとの親和性が高いということで注目されているようです。書式はf-stringと似ており、[t"x={x}"]というように記述されます。
まだ新しい機能ですが、これからの活用が期待されている機能なようなので、どういったものなのか気になる方は以下の参考リンクをご参照ください。
https://www.pythonic-exam.com/archives/10254
というところで、補足は終わりまして...。
ところで、strと書かれていると、str()がぱっと思い浮かびますが、str()とstr.format()は役割が異なります。
str()は数値を文字列にするだけで、文字列の組み立ては行いません。
一方で、str.format()は、文字列の中に値を埋め込む機能を持っており、その際に必要な型変換も内部で自動的に行われます。
書き方の例としてはこんな感じ。
例)
str()の場合
print("値は" + str(x))
str.format()の場合
print("値は{}".format(x))
ここまでで文字列フォーマットについて確認しました。
では次に、現在の文字列フォーマットの手法であるf-stringについて学んでいきます。f-stringはプログラムを簡潔に書けるので、可読性を高められるため、現在のPython開発の主流として推奨されているとのことです。
------------------------------------
P.100
Python3.6では、f-string(フォーマット・ストリングの略)の登場によって他の文字列を含む文字列を作成しやすくなっています。raw文字列が引用符の前にrを付けるように、f-stringはfを付けます。f-stringの中括弧に変数名を入れると、その変数に格納されている値を挿入することができます。
name, day, weather = ’Al’, ’Sunday’, ’sunny’
f’Hello, {name}. Today is {day} and it is {weather}.’
’Hello, Al. Today is Sunday and it is sunny.’
中括弧の中に式を入れることもできます。
width, length = 10, 12
f’A {width} by {length} room has an area of {width * length}.’
’A 10 by 12 room has an area of 120.’
f-stringの中で中括弧を使いたい場合は、さらに中括弧を追加すると表示することができます。
spam = 42
f’This prints the value in spam: {spam}’
’This prints the value in spam: 42’
f’This prints literal curly braces: {{spam}}’
’This prints literal curly braces: {spam}’
------------------------------------
f-stringを使用しない場合、
f’Hello, {name}. Today is {day} and it is {weather}.’
は、
"Hello, " + name + ". Today is " + day + " and it is " + weather + "."
というように文字列の部分をクォーテーションで囲んで、各変数を+でくっつけていく必要がありました。
比べるとわかりますが、確かに短くなりますし、記号が減ったのでとても読みやすいですね。
ちなみに引用文の例では変数の中に複数のワードがまとめられていますが、個別に変数が定義されていても問題なく埋め込むことができます。また、辞書やリストなどの値も参照できます。
こんな感じ。

辞書のキーを指定して値を取り出し、そのまま文字列の中に埋め込む形です。
ところで、小数点などのフォーマットを指定してあげたいケースもあると思います。
そういう時は、
en = 3.14159
print(f"{en:.2f}")
というように書かれます。
この「.2f」の内、「.2」は小数点第二位までを表示する、「f」は浮動小数点数(float)を指します。なので、小数点第三位まで表示したいなら「.3f」となります。
フォーマットの指定方法は小数点以外に、桁幅やカンマ区切り、左寄せ・右寄せ、パーセント表示といったことも指定できるとのこと。
| フォーマット | 意味 | 書き方の例 | 表示 |
|---|---|---|---|
| :.2f | 小数点第二位まで表示 | f"{3.14159:.2f}" | 3.14 |
| :, | 3桁ごとのカンマ区切り | f"{1234567:,}" | 1,234,567 |
| :10 | 10文字分確保(右寄せ) | f"{123:10}" | 123 |
| :<10 | 左寄せ | f"{123:<10}" | 123 |
| :^10 | 中央寄せ | f"{123:^10}" | 123 |
| :05 | 0埋め(5桁) | f"{42:05}" | 00042 |
| :.0% | パーセント表示 | f"{0.256:.0%}" | 26% |
| :.2e | 指数表記 | f"{1234:.2e}" | 1.23e+03 |
この辺りの詳細は公式ドキュメントに例もありますので、興味がある方はそちらもご参照ください。
https://docs.python.org/ja/3.13/tutorial/inputoutput.html#formatted-string-literals
ちなみに、raw文字列と f-stringを組み合わせて使うこともできるようです。
通常、「r"..."」や「f"..."」と書く部分を、「fr"..."」や「rf"..."」と記述することで、バックスラッシュをそのまま扱いつつ、文字列の中に変数や式を埋め込むことが可能です。正規表現やWindowsのパス文字列などを扱う場合に便利なんだとか。
ただ、raw 文字列であっても {} の中の部分には通常の Python のルールが適用されるなど、細かな仕様があるそうなので、詳細を知りたい方は、以下の参考リンクをご参照ください。
・PEP 498(f-string の公式仕様)
https://peps.python.org/pep-0498/
・Python公式リファレンス(f-string)
https://docs.python.org/ja/3/reference/lexical_analysis.html#f-strings
それではきりが良いのでこちらで終了です。
今回もお付き合いいただきありがとうございました。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes