【メモ】Pythonのf文字列の実力がすごい

Pythonのバージョン3.6から導入されているf文字列f-string:フォーマット文字列)は普通は便利なので普段遣いしていますが、色々と知らない機能があったのでメモ。

テキストの配置と整形

プログラムで標準出力に途中結果を表示することはあるかなと思いますが、そんなときに以下のような区切りの表示をすることはないでしょうか。自分はよくあります🙄

#######実行表示########

ただ、これをつくるのって結構面倒だし、開始時・終了時で挟もうものなら、長さがズレていると気持ち悪くなります。最近面倒なので以下みたいな感じにすることも多いです。それでも面倒です🙃

実行表示###############

実はこの対応がf文字列でできるということを最近知りました。しかも、、左右や中央に文字を寄せることもできるという。

以下のようにします。

  • 右寄せ:f"{text:>20}" (20文字分のスペースで右寄せ)
  • 左寄せ:デフォルト、またはf"{text:<20}"
  • 中央寄せ:f"{text:^20}"
  • 空白部分を特定の文字で埋める:f"{text:#>20}"

たとえば、以下のような事ができます。

text = "Hello"

# 中央揃えの場合
print(f"{text:#^20}")  # #######Hello########

# 左揃えの場合
print(f"{text:#<20}")  # Hello###############

超便利!😎

日時のフォーマットもf文字列で

datetimeオブジェクトを様々な形式で表示指定できるようです。 自分はいつもだと以下のような感じにしていましたが

from datetime import datetime

now = datetime.now()
# strftimeを使用
print(now.strftime('%Y年%m月%d日 %H:%M:%S'))

f文字列だと以下のように記述できるようです。少しタイプ量は減るかな。

f"{datetime:%d/%m/%Y}"のように記述します。

from datetime import datetime

now = datetime.now()
print(f"{now:%Y年%m月%d日 %H:%M:%S}")

フォーマットのメモ

こんな書き方もできるみたい。

print(f"{now:%Y}年{now:%m}月{now:%d}日 {now:%H}:{now:%M}:{now:%S}")

デバッグ用の変数表示

print()を使用して変数を使用する場合、表示する変数の名前も書かないと行けないので面倒でした。

例えばこんな感じ

a = 10

#これまでの自分の認識
print(f"a={a}")
# 出力結果は
# a=10 

# 他にも以下のような書き方ができます。
# 従来の%演算子を使用
print("a= %d" % a)

# str.format()を使用
print("a= {}".format(a))

地味に面倒🙄実はこれもf文字列をつかうことで以下の様にかけます。

※ただしPython3.8以上でないとこの使用方法は使えないのでご注意を!

a = 10

print(f"{a=}")
# 出力結果は
# a=10 

=を使用して変数名と値を同時に表示できるのでした。圧倒的に楽だ!😎

他にも以下のような事もできます。 - 例:f"{a + b=}"`で`a + b=15のように表示 - 式の評価結果も同様に表示可能 - スペースを入れて可読性を向上させることができる

数値のカンマ入れ

f文字列では桁区切りの文字を入れる事もできます。特にカンマ区切りにしてほしいとかいうのかなり面倒でそのために関数を作っていたのですが、それが不要になりました。

こんな感じでf"{number:,}"で桁区切りを表示できます😎

カンマ(,)以外にもアンダースコア(_)を区切り文字として使用可能です。

アンダースコアの例:f"{1000000:_}"→ 1_000_000

print(f"{1000000:,}")
# 出力結果
#1,000,000

おわりに

f文字列、便利すぎる…😎😎😎

/* -----codeの行番号----- */