if文などで処理を分岐させたいときに判定として真偽値を使うことがありますが、このとき「1と0」で書く派と「TrueとFalse」で書く派に分かれるのではないでしょうか。私は「1と0」派ですが「TrueとFalse」で書く方が可読性が改善しそうだなぁと思うときがあります。
1文字から4~5文字入力しなければならなくなるため手間が増えてしまいますが、そもそもとしてこの2つは本当に全く同じ速度で処理してくれるのかという疑問があります。
いくら可読性が上がっても実行速度に影響があるのであればあまり採用したくはありません。そこで簡単なコードを作成して処理速度を検証してみることにしました。
検証方法はfor文内に「1」「0」「True」「False」それぞれを条件式にしたif文を記述したうえで、1000万回ループする処理を1万回実行して処理時間の最大値・最小値・平均値・中央値を計測しました。
if 1:
pass
if 0:
pass
if True:
pass
if False:
pass
検証結果
1 | 0 | True | False | |
最大値 | 1.11568529997021 | 0.932445299811661 | 0.991363500012085 | 1.01934670004994 |
最小値 | 0.493049599928781 | 0.485620300052687 | 0.519697500159964 | 0.503387300064787 |
平均値 | 0.599109081850131 | 0.547794443869521 | 0.594674719320447 | 0.57190826876096 |
中央値 | 0.579065600060858 | 0.536160500021651 | 0.581213500001468 | 0.559252750012092 |
まず「1」と「True」は条件一致してif文に入るので、「0」「False」と比べて処理に時間がかかってしまうのは間違いないです。その上でこの2つはほとんど重なり合っていることから処理速度に違いがないことが分かります。
一方で「0」と「False」には何故か若干のズレが発生しており、平均値ベースで約1.044倍の差があります。なぜこうなったのかを調べてみたりAIに考察してもらったところ、恐らく実行環境や検証コードの記述方法による問題の可能性が高いのではないかという予想に落ち着きました。
一応、int型とbool型という違いがあるのでなんらかの変化が発生する可能性を考えていましたが特にそんなことはなかったみたいです。
なので気にせず好きな方を使えばいいのではないかというのが一先ずの結論になります。
コメント