2017-06-17 33 views
1

注意:这个问题的确已被许多其他语言回答。 但是,我找不到Python的答案,所以不要标记为重复。三元运算符与if-else语句的性能(Python)

Python中的if-else语句和三元运算符之间的性能有差异吗?

+2

只需使用任何一个你感觉使代码更易读。如果你曾经处于一个热门循环中,那么它可能会有所作为,可以采用双向代码并在实际代码的上下文中衡量性能。可能还有其他更重要的因素,例如您使用的算法。 –

回答

2

我怀疑是否有性能差异。他们编译为等效的字节码序列:

>>> 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 

与大多数性能问题一样,答案是衡量。

0

从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秒。 –