syakoo's Lab

技術ブログやちょっと気合の入った記事を残すブログ

文字列の出力についての簡単な実験ログ(python)

背景

いつも変数に格納された文字列を代入しながら出力するのは以下のやり方を使っていた。

>>> S = ["King","Queen","Rook","Bishop","Knight","Pawn"]
>>> print("It is a {}".format(S[3]))
It is a Bishop

でも以下の表現の仕方がPython3.6から導入されたと聞いた。

>>> print(f'It is a {S[4]}')
It is a Knight

上の方が知名度は高い気がするが、早さがどうなのか気になった。

実験内容

早さの測定には前回も使ったpytestを使ってみる。背景にもあるが改めてエントリーしたのはこの二方。

format

def print_format(s):
    print("lyrics: {}".format(s))

f-string

def print_f(s):
    print(f"lyrics: {s}")

使う文字列は前回も使った"What Do I Know? / Ed Sheeran"の歌詞を使った。

実験結果

どちらも同じような早さだった

前回の結果から一曲の歌詞じゃ差はでないと思うが一応やってみる。

================================ slowest test durations ================================
0.00s call     test_test.py::test_print_format
0.00s call     test_test.py::test_print_f
0.00s setup    test_test.py::test_print_format
0.00s teardown test_test.py::test_print_f
0.00s setup    test_test.py::test_print_f
0.00s teardown test_test.py::test_print_format
=============================== 2 passed in 0.05 seconds ===============================

時間は両方とも0.00sとなっているが、formatの方が上に来ている。formatの方が若干遅いのかと思って、10000回ループしてみた。

================================ slowest test durations ================================
0.15s call     test_test.py::test_print_f
0.15s call     test_test.py::test_print_format
0.00s teardown test_test.py::test_print_f
0.00s setup    test_test.py::test_print_f
0.00s teardown test_test.py::test_print_format
0.00s setup    test_test.py::test_print_format
=============================== 2 passed in 0.33 seconds ===============================

今度はf-stringの方が上に来ていた。何回か試してみたが、早さは同じくらいなようだ。

まとめ

formatとf-stringの早さはまあまあ同じということが分かった。 formatの方が見慣れているし、f-stringはpythonのバージョンを見ないといけないが、f-stringの方が柔軟性はあるみたいなので積極的に使っていってもいいのかなと思った。