SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonの新機能を知ろう!

Python 3.10~3.12の魅力:入門者も使いやすいf-string、ExceptionGroup、進化したエラーメッセージの機能を解説

Pythonの新機能を知ろう! 第4回

Python 3.6で導入されたフォーマット済み文字列リテラル(f-string)がシンプルな記述へ[3.12]

 Python 3.12では、f-stringと呼ばれるフォーマット済み文字列リテラルがさらに使いやすくなりました。ここでは、Python 3.6で導入されたフォーマット済み文字列リテラルを、その強化の過程を追いながら紹介します。

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

 フォーマット済み文字列リテラル(以下、f-string)とは、文字列リテラルに接頭辞「f」を付けることによって、文字列の一部を変数や式で置き換えることができるようにする機能です。JavaScriptなどのプログラミング言語で利用可能なおなじみの機能ですが、もともとは文字列に対するformatメソッドで実現していました。以下のように使用します。

"{インデックス:書式指定子}".format(値[, ...])

 { ... }は置換フィールドと呼ばれ、値による置き換えの対象となります。インデックスは値との対応を決める0からの数値あるいはキーワードで、書式指定子は値の型を決める文字の組み合わせです。インデックスは省略でき、その場合はformatメソッドの引数が順番に使われます。書式指定子も省略可能で、その場合は引数の値から最適なものが選択されます。

fstring.py
name = "Nao"
birth = 1900
print("{name} さんの誕生年は {birth} 年です。".format(name=name, birth=birth))
# 実行結果:Nao さんの誕生年は 1900 年です。

 formatメソッドによる方法は、置換フィールドと値が分離しているので対応の管理が面倒、同じような記述が重複するといった問題がありました。そこでPython 3.6において、文字列中に置換フィールドと値を直接埋め込み可能なf-stringが導入されました。f-stringでは、接頭辞「f」を付加した文字列リテラルにおいて置換フィールドに値と書式を直接書けるので、シンプルな記述が可能になりました。

fstring.py
print(f"{name} さんの誕生年は {birth} 年です。")
# 実行結果:Nao さんの誕生年は 1900 年です。

Python 3.12で強化されたf-string

 Python 3.12では、このf-string構文がさらに使いやすく強化されました。具体的には、以下の点で強化されています。

  • 同一引用符の利用が可能に
  • 式やコメントを複数行に分けて記述可能に
  • バックスラッシュを記述可能に

 通常、文字列リテラルでは外側と内側で同じ種類の引用符を使うことはできません。例えば、外側が二重引用符(")であれば、内部で使えるのは単引用符(')かトリプルクォート("""または''')のみです。これがPython 3.12のf-stringにおいては緩和され、同一引用符の使用が可能になりました。これにより、例えば以下のリストのような記述が可能になります。

fstring.py
names = ['Nao', 'Shino', 'Yuutan']
print(f"グループメンバー一覧:{", ".join(names)}")
# 実行結果:グループメンバー一覧:Nao, Shino, Yuutan

 置換フィールド内に文字列リテラルとjoinメソッドを入れていますが、ここで文字列リテラルに外側と同じ二重引用符を使うことができます。文字列リテラルの中だからと、別の引用符を使う必要がなくなりました。これは、単引用符、トリプルクォートでも同じです。極端な例を挙げれば、以下のような記述も可能です。f-stringにおいては入れ子も可能でしたが、Python 3.11までは引用符が重複しないように最初の例のようにトリプルクォートまで駆使する必要がありました。

fstring.py
print(f"""{f'''{f'{f"{name}"}'}'''}""")			// ~Python 3.11
print(f"{f"{f"{f"{f"{f"{name}"}"}"}"}"}")		// Python 3.12~
# 実行結果:Nao

 さらに、置換フィールドを複数行に分けて記述したり、バックスラッシュによるエスケープ文字をUnicodeも含めて記述可能になりました。

fstring.py
print(f"グループメンバー一覧:{"\N{black spade suit}".join([
    'Nao',
    'Shino',
    'Yuutan'
])}")
# 実行結果:グループメンバー一覧:Nao♠Shino♠Yuutan

次のページ
ExceptionGroupとTaskGroupのサポートで例外処理を効率的に扱う[3.11]

この記事は参考になりましたか?

Pythonの新機能を知ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/18916 2024/01/31 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー