🐍

【Python】f-stringを使いこなして、快適なprintデバッグを

2022/10/18に公開

f-string(フォーマット済み文字列リテラル)の便利な使い方を知ったので、まとめてみました。

おそらく一般的な使い方は、

text = "world"
print(f"hello {text}")
hello world

=を使ったデバッグに便利な例

バージョン3.8で追加された=を使うことで、変数名 = 値という形で文字列を表示できる。

text = 'world'
print(f"{text = }")
text = 'world'

計算もできます。

print(f"{1 + 1 = }")
1 + 1 = 2

関数も使えます。

print(f"{sum([1,2,3]) = }")
sum([1,2,3]) = 6

とっても便利!
これ以降に紹介しているf-stringの使い方と組み合わせて使うこともできます。

import math
print(f"{math.pi = :.4f}")
math.pi = 3.1416

入れ子にもできちゃいました。

print(f"{f'{10:X}' = }")
f'{10:X}' = 'A'

書式指定子を使った例

:の後に書式指定子を置くことで、書式指定ができます。

整列・埋める

|<|^`で文字を整列できます。

右詰め

a = 100
print(f"a = {a:>10}円")
a =        100円

左詰め

<の記号を使わずに、数字のみでも左詰される。

a = 100
print(f"a = {a:<10}円")
a = 100       円

中央揃え

a = 100
print(f"a = {a:^10}円")
a =    100    円

空白を埋める

>,<,^の前に文字を置くことで、空白をその文字で埋めることができます。

a = 100
print(f"a = {a:+^5}")
a = +100+

ゼロ埋め

a = 100
print(f"a = {a:0>5}")
a = 00100

符号

+,-で符号の使用を指定できます。
+は、正数、負数のどちらでも符号を表示
-は、負数のみで符号を表示(デフォルト)

a = 100
print(f"a = {a:+}")
a = +100

整数の表現型

整数は様々な表現型があります。

意味
'b' 2進数
'c' Unicode 文字
'd' 10進数
'o' 8進数
'x' 16進数(小文字)
'X' 16進数(大文字)
>>> f"{127:b}"
'1111111'
>>> f"{128512:c}"
'😀'
>>> f"{10:d}"
'10'
>>> f"{10:o}"
'12'
>>> f"{10:x}"
'a'
>>> f"{10:X}"
'A'

区切り文字

>>> f"{100000:,}"
'100,000'

小数点以下

>>> import math
>>> f"{math.pi:.3f}"
'3.142'

文字列に変換する例

!の後にs,r,aを置くことで、それぞれ、str(),repr(),ascii()で変換した結果を表示することができます。

import datetime
today = datetime.date.today()

print(f"{today!s}")
print(str(today))

print(f"{today!r}")
print(repr(today))
2022-10-18
2022-10-18
datetime.date(2022, 10, 18)
datetime.date(2022, 10, 18)

参考文献

https://docs.python.org/ja/3.8/reference/lexical_analysis.html#formatted-string-literals
https://docs.python.org/ja/3.8/library/string.html#formatspec

Discussion