三元运算符与if-else语句的性能(Python)
问题描述:
注意:这个问题的确已被许多其他语言回答。 但是,我找不到Python的答案,所以不要标记为重复。三元运算符与if-else语句的性能(Python)
Python中的if-else语句和三元运算符之间的性能有差异吗?
答
我怀疑是否有性能差异。他们编译为等效的字节码序列:
>>> def f():
... return a if b else c
...
>>> dis.dis(f)
2 0 LOAD_GLOBAL 0 (b)
2 POP_JUMP_IF_FALSE 8
4 LOAD_GLOBAL 1 (a)
6 RETURN_VALUE
>> 8 LOAD_GLOBAL 2 (c)
10 RETURN_VALUE
>>> def g():
... if b:
... return a
... else:
... return c
...
>>> dis.dis(g)
2 0 LOAD_GLOBAL 0 (b)
2 POP_JUMP_IF_FALSE 8
3 4 LOAD_GLOBAL 1 (a)
6 RETURN_VALUE
5 >> 8 LOAD_GLOBAL 2 (c)
10 RETURN_VALUE
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
与大多数性能问题一样,答案是衡量。
答
从Python 3.6.1的一些测试中,似乎完整的语句更快。
我的结果:
>>> timeit.timeit("""3 if True else 8""")
0.012174860001323395
>>> timeit.timeit("""3 if False else 8""")
0.019092951000857283
>>> timeit.timeit("""if True:
... 3
... else:
... 8""")
0.009110345999943092
>>> timeit.timeit("""if False:
... 3
... else:
... 8""")
0.00877297099941643
+1
我认为这可能与'timeit'有关,试图解析三重引用的评论。我定义了函数来用if-else语句和三元运算符来评估这种情况,对于100次重复都使用了'timeit.repeat',并且对于三元运算符得到了0.81秒的平均值(对于默认1,000,000次运行) ,if-else语句为0.88秒。 –
只需使用任何一个你感觉使代码更易读。如果你曾经处于一个热门循环中,那么它可能会有所作为,可以采用双向代码并在实际代码的上下文中衡量性能。可能还有其他更重要的因素,例如您使用的算法。 –