Python3.12の新機能 Python 3.12の新機能(その1) PEP 701: f文字列の形式定義

PEP 701: f文字列の形式定義PEP 695: 型パラメータ文法その他の型ヒント関連機能PEP 688: バッファープロトコルをPythonで利用可能にPEP 684: インタープリター別GILPEP 683: 固定参照カウントによる永続オブジェクトPEP 709: 内包式のインライン化

今年も、Pythonのメジャーリリースの季節がやってまいりました。このシリーズでは、2023年10月3日にリリースされたPython 3.12の新機能を、一つずつ紹介していきます。

PEP 701: f文字列の形式定義

Python3.6で導入された f文字列 はすっかりPythonに定着し、広く使われるようになりました。f文字列を使えば、変数や式を利用した文字列を簡単に作れます。

In [5]:
price = 100 # 値段
amount = 10 # 個数
print(f"一つ{price}円のりんごを{amount}個買うと{price*amount}円になります。")
一つ100円のりんごを10個買うと1000円になります。

f文字列を導入した当時のPythonには実装上の制約があり、f文字列の式のなかでは "\" 記号を使えないなどの制限がありました。また、本来、f文字列のようなPythonの文法は、一種の BNF記法で定義 されます。しかし、f文字列については、きちんとした文法として記述できず、文章であいまいに説明されているだけでした。

しかし、Python3.9で導入された PEGパーザ によって不要な制約から解放され、PEP 701 で f文字列内でもPythonの式と同等の記述ができるようになりました。従来のf文字列ではPythonの文法の一部しかサポートしていませんでしたが、3.12からはほとんど同じ記述ができるようになりました。

Python3.12では次のような記述が可能になりました。

クオート文字のネスト

f文字列全体のクオート文字と同じクオート文字を、式の中で使えるようになりました。

f"aはasciiコードで{hex(ord("a"))}"
f'aはasciiコードで{hex(ord('a'))}'
f"{f"{f"{"f文字列ネストし放題!"}"}"}"

\と改行

式の中で \ や改行が使えるようになりました。

f"{'\n'}"
f"{
1+1
}"

コメント

式の中でコメントが使えるようになりました。

f"{
1+1  # 1行目
+2+2 # 2行目
}"
Copyright © 2001-2023 python.jp Privacy Policy python_japan
Amazon.co.jpアソシエイト
Amazonで他のPython書籍を検索