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が入るっていうのはなかなか面白い