この記事は?
Python 3.6 で追加された f-strings (フォーマット済み文字列リテラル) の使用例です。式展開 の機能が存在する Ruby や JavaScript などの言語から移住してきた身なので重宝しています。ただ、書式指定文字列 の文法をしばしば忘れてしまうので備忘録として残します。
f-strings の使用例
位置揃えとパディング
number = 123
# ゼロパディングする。
f'{number:0>10}' # 右寄せ
#=> '0000000123'
f'{number:0^10}' # 中央寄せ
#=> '0001230000'
f'{number:0<10}' # 左寄せ
#=> '1230000000'
# パディングのための文字列を指定しない場合は、半角スペースで埋められる。
f'{number:>10}'
#=> ' 123'
f'{number:^10}'
#=> ' 123 '
f'{number:<10}'
#=> '123 '
# パディングの長さやパディングに使う文字も変数で指定できる。
padding_length = 5
f'{number:0>{padding_length}}'
#=> '00123'
padding_char = '*'
f'{number:{padding_char}>{padding_length}}'
#=> '**123'
桁区切り
number = 1234567890
f'{number:,}'
#=> 1,234,567,890
小数点以下の桁数
ratio = 0.123
f'{ratio:.2}'
#=> 0.12
f'{ratio:.5}'
#=> 0.123
f'{ratio:.5f}' # 末尾に固定小数点数フォーマット f を付けるとゼロパディングする。
#=> 0.12300
パーセント表示
ratio = 0.123
f'{ratio:%}' # 固定小数点数のデフォルトの精度は 6 である。
#=> 12.300000%
f'{ratio:.3%}'
#=> 12.300%
str(), repr(), ascii()
class Man:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
man = Man('ジャギ')
f'こいつの名は{man}!'
#=> 'こいつの名はジャギ!'
f'こいつの名は{man!s}!' # str(man) と同じ。
#=> 'こいつの名はジャギ!'
f'こいつの名は{man!r}!' # repr(man) と同じ。
#=> 'こいつの名は<__main__.Man object at 0x10874c2b0>!'
f'こいつの名は{man.name!r}!' # repr(man.name) と同じ。文字列がシングルクォーテーションで括られる。
#=> "こいつの名は'ジャギ'!"
f'こいつの名は{man.name!a}!' # ascii(man.name) と同じ。
#=> "こいつの名は'\\u30b8\\u30e3\\u30ae'!"
print(f'こいつの名は{man.name!a}!')
# こいつの名は'\u30b8\u30e3\u30ae'!
参考
- Python ドキュメント
- Python 言語リファレンス » 2. 字句解析
- Python 標準ライブラリ » 6. テキスト処理サービス » 6.1. string — 一般的な文字列操作