kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Formatted string literals

LP3tHWでPythonにもString Interpolationがあることを知ったので軽く調べておく
PythonではFormatted String Literalsと呼ばれる
ざっくりいうとf""のように文字列の前にfをつけると
文字列の中に{式}があれば式を評価したものが文字列に置き換えられる
変数名を書くのではなくて式が書ける

>>> name = "kb84tkhr"
>>> f"My name is {name}"
'My name is kb84tkhr'
>>> f"1+1={1+1}"
'1+1=2'

変換や書式指定はstr.format()と同じような書き方が可能
「式」の後ろに!rをつけるとrepr()で変換、!aならascii()で変換

>>> name = "小林"
>>> f"repr() format: {name!r}"
"repr() format: '小林'"
>>> f"ascii() format: {name!a}"
"ascii() format: '\\u5c0f\\u6797'"

:に続けて書式指定

>>> price = 23.4
>>> f"The price is {price:.2f}"
'The price is 23.40'

詳しくは2.4.3. Formatted string literals
「式」にはこういうことが書けるようなんだけれどもちょっと飲み込めていない

f_expression      ::=  (conditional_expression | "*" or_expr)
                         ("," conditional_expression | "," "*" or_expr)* [","]
                       | yield_expression

式をカンマで区切って書くことができるよ(タプルとして扱われる)とか
yield式も書けるよ、っていう理解でいいのか

PEP 498 – Literal String Interpolationも面白いかもしれない

同じようなものはbourne shellのときから(その前は知らない)あったのにPythonでは%の記法から始まって3.2でstr.format()が導入され
3.6になってついにString Interpolationが入るっていうのはなかなか面白い