フィナンシェいつ食べても美味しいね、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.900 | 12.037 |
2回目 | 11.937 | 12.026 |
3回目 | 11.924 | 12.061 |
4回目 | 11.906 | 12.020 |
5回目 | 11.879 | 12.056 |
6回目 | 11.905 | 11.986 |
7回目 | 11.923 | 11.994 |
8回目 | 11.919 | 12.031 |
9回目 | 11.927 | 12.061 |
10回目 | 11.924 | 11.985 |
平均 | 11.914 | 12.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文を優先して使用したいと思います。

「mizky」で「みずき」と読みます。エンターテイナーになりたい。普段はサラリーマン(気持ちは引き篭もりニート)。アプリ開発、HP運営、投資など手広くやっております。九州大学大学院卒業。趣味は旅行、レースゲーム。
コメント