contentpythonのf-stringとformatとパーセント%の書式の速度の比較Python文字列matplotlib速度比較f-stringpythonで文字列を書く時はいつも%書式を使ってたのですが、python3.6からはf-stringという新しい表記があります。https://qiita.com/shirakiya/items/2767b30fd4f9c05d930bで、二ヶ月前にこの記事を書いた時にhttps://qiita.com/phyblas/items/9a087ad1f73aca5dcbe5@shiracamusさんに指示してもらったのはきっかけで、f-stringを興味を持ち始めたのですが、今でも時々python2.7を使う必要がまだあるので、互換性のことを考慮するとやはり今はまだf-stringに乗り換える時ではないと思ってました。先日この記事を見つけました。https://qiita.com/Nakamurus/items/9171a37014d9b25eece0記事ではf-stringが高速だと説明したのです。早ければ乗り換えるメリットがあるし、いいかもしれないと思ったので、結局自分も実験してみたのです。今回は3つの方法の速度を測って比べることにしました。%書式formatf-string色々試してみたのですが、結果は意外でした。ここでその結果を発表します。%書式からf-stringに乗り換えるべきかどうか迷っている人に参考になれたらと思います比較対象データの種類によって結果は随分違います。今回で実験してみたのは文字列をそのまま出力する(%s、{})intを文字列に変換する(%d、{})intを指定の桁数で0埋めて文字列に変換する(%010d、{:010})floatを指数形式で小数部の桁数を指定しずに文字列に変換する(%e、{:e})floatを指数形式で指定の小数部の桁数で文字列に変換する(%.10e、{:.10e})floatをfで小数部の桁数を指定しずに文字列に変換する(%f、{:f})floatをfで指定の小数部の桁数で文字列に変換する(%.10f、{:.10f})floatを形式を指定しずに文字列に変換する(%s、{})Noneを文字列に変換する(%s、{})listを文字列に変換する(%s、{})小数(float)の場合は色々違う形で変換できるのです。コード3つの方法で10つの場合毎に五回実行して平均値と標準偏差を求めて棒グラフを書いてみす。上図はマイクロ秒単位の一回毎の過ごす時間で、下図は%書式の場合と比べる倍数です。3.7.1で実行したのですが、環境によって違う可能性があるかもしれません。まとめ結果から見ると、殆どの場合は%書式の方が早いです。文字列をそのまま出力する場合ははf-stringの方が早いですが、それ以外は勝つことがありません。formatについてですが、この記事を読んだことがあります。https://qiita.com/amedama/items/8635aff8729a248bad16記事によると、formatの方が推奨さられていたようですが、結果から見ると、どんな場合でも%書式より遅いようですし書く時も一番冗長だから、そもそもformatを使う理由はあるのでしょうか?と不思議に思っています。文字列をそのまま出力する時はf-stringはとても高速ですし、短く書けるから便利です。整数やリストを形式を指定しないで文字列に変換する場合もあまり変わらないようです。形式指定で整数と小数を変換することはf-stringは向いていないようです。どんな場合でもformatよりも遅いです。書き方もこの場合では%書式と同じくらいの長さになります。いうわけで、速度のことにこだわるのなら使い分けしたらいいかもしれません。言っても、速度の違いはそんなに大きいっていうわけではないから、好きなように選ぶといいと思います。φυβλας@phyblas天文学科の学生です。機械学習に興味を持っており、色んな技術を勉強しています。得意な言語はpythonで、苦手なのは英語です。ちなみにアニメ大好きです。upLoginユーザーは見つかりませんでした。