Pythonの条件分岐でnotをつけるとやっぱり動作は遅くなる?(Python3)
今回はPythonの条件分岐でnotをつけると本当に動作が遅くなるのか、動作が遅くなるとしたらどれくらい遅くなるのかについて調査した結果をまとめたいと思います。
動作環境はPython3です。
Pythonの条件分岐でnotをつけるとやっぱり動作は遅くなる?(Python3)
いきなりですが、次の二つのソースを用意しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import time test = 'aaa' resultList = [] for j in range(100): start = time.time() for i in range(100000000): if test == 'aaa': pass process_time = time.time() - start print(str(j+1) + ' times.') resultList.append(process_time) print(process_time) print('') ave = sum(resultList) / len(resultList) print(resultList) print('平均: ' + str(ave)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import time test = 'aab' resultList = [] for j in range(100): start = time.time() for i in range(100000000): if not test == 'aaa': pass process_time = time.time() - start print(str(j+1) + ' times.') resultList.append(process_time) print(process_time) print('') ave = sum(resultList) / len(resultList) print(resultList) print('平均: ' + str(ave)) |
一番上のソースがnotをつけない場合の条件分岐がある処理、下のソースがnotをつけた場合の条件分岐がある処理です。
それぞれ1億回ループを回し、それを100セット実行して実行時間の平均を出力しています。
なお、内部の処理をできるだけ合わせるために、notをつけた場合は2文字目までは比較でヒットし、3文字目で比較でアンヒットさせるようにしています。
それぞれについて、実行結果は次のようになりました。
途中printを多く挟んでいますが、平均実行時間の出力結果のみ貼り付けます。
〜notをつけない場合の実行結果〜
1 |
平均: 5.969278304576874 |
〜notをつけた場合の実行結果〜
1 |
平均: 6.343078789710998 |
結果を見ると、確かにnotをつけた場合は遅くなります。
0.37秒ほど離れているので、notをつけた場合の方が遅いということはきちんと計算したわけではありませんが統計的に有意と言えそうです。
しかし、ほぼ誤差と言って差し支えないですね。
この程度の実行時間の速さを求めるよりも可読性が良いソースを作成することを心がけた方が良さそうです。
終わりに
今回はPythonの条件分岐でnotをつけると動作は遅くなるのか、どのくらい遅くなるのかについて調査した結果を書きました。
結論を言うと、確かにnotを多用すると遅くはなりますが、そこまでパフォーマンスが落ちることはなさそうです。
PythonやPythonを使ったライブラリやフレームワークのパフォーマンスの調査に興味があり、様々なコーディング方法の違いによる最適化の調査を行っております。
リストにまとめてあるので、よろしければ覗いてみてください。
Pythonとそのライブラリやフレームワークのパフォーマンス調査結果リスト
ディスカッション
コメント一覧
まだ、コメントがありません