【Python】if文と三項演算子(条件演算子)の処理時間を比較した

eyecatch-python-if-tenary-operator-runtime

フィナンシェいつ食べても美味しいね、mizkyです。

Pythonで条件分岐を書く際に、基本的には

  • if文
  • 三項演算子(条件演算子)

の2つが挙げられると思います。

今回は、この2つで処理時間が変わるか調べてみました。

なお、個人的には三項演算子に頑張ってもらいたいです。
理由としては、if文よりコードが読みにくいうえに、処理時間が遅かったら救いようがないからです。。。

検証用のコード

if文

まずはif文の検証コードです。

import random
import time

start_time = time.time()

for _ in range(10 ** 7):
    num = random.choice([0, 1])
    if num:
        result = 1
    else:
        result = 0

run_time = time.time() - start_time
print('run time: ' + str(run_time))

10の7乗回、for文を回します。

for文の中では、0あるいは1のどちらかをランダムで選択し
1であれば、resultに1を代入し、0であればresultに0を代入する、です。

冗長ですが、検証用コードなのでお許しを。。。

三項演算子(条件演算子)

三項演算子の検証コードです。

import random
import time

start_time = time.time()

for _ in range(10 ** 7):
    num = random.choice([0, 1])
    result = 1 if num else 0

run_time = time.time() - start_time
print('run time: ' + str(run_time))

中身はif文と同じです。

検証方法

上記のコードを各々10回実行し、処理時間を比較します。

検証結果

各コードを10回実行し、処理時間をまとめたのが、以下の表です。

if文 / sec.三項演算子 / sec.
1回目11.90012.037
2回目11.93712.026
3回目11.92412.061
4回目11.90612.020
5回目11.87912.056
6回目11.90511.986
7回目11.92311.994
8回目11.91912.031
9回目11.92712.061
10回目11.92411.985
平均11.91412.026
検証結果

if文の方が平均で0.111秒早かったです。

考察

処理速度に違いが発生した理由について考えます。

まず、if文についてです。

    if num:
        result = 1
    else:
        result = 0

1行目のif num:でTrueだった場合は、result = 1が実行されます。
逆に、Falseだった場合は、result = 1は実行されません。result = 0が実行されます。

続いて、三項演算子についてです。

result = 1 if num else 0

もし、コードが書かれている順に実行されるとすると
上記のコードはif numの結果に問わず、result = 1が実行されます。

その後、if numがTrueであれば、else以下は実行されず
if numがFalseであれば、else以下が実行され、resultに0が代入されます。

したがって、if文と比較すると、
必ずresult = 1が実行される分だけ処理時間が長くなったと推測できます。

結論

if文の方が三項演算子よりも処理時間が速い(パフォーマンスが良い)という結果となりました。

私自身は、三項演算子が見づらくて好きではないので、
これを機に、コードを1行で書く理由がない場合は、if文を優先して使用したいと思います。

コメント

タイトルとURLをコピーしました