Python == with或vs. list in comparison

时间:2018-06-15 14:11:13

标签: python python-2.7

检查相等性时,以下速度和功能之间是否存在实际差异:

number = 'one'
if number == 'one' or number == 'two':

VS

number = 'one'
if number in ['one', 'two']:

2 个答案:

答案 0 :(得分:6)

如果值是文字常量(如本例所示),in可能会运行得更快,因为(极其有限的)优化器会将其转换为一次性加载的常量tuple ,减少了对两个廉价负载执行的字节码工作,以及单个比较操作/条件跳转,其中链式or涉及两个廉价负载和每个测试的比较操作/条件跳转。

对于两个值,它可能没有那么多帮助,但随着值的数量增加,字节代码比替代方案节省(特别是如果命中不常见,或者在选项中均匀分布)可能是有意义的。

以上特别适用于CPython参考解释器;其他解释器可能具有较低的每字节码成本,可以减少或消除性能差异。

如果number是一个更复杂的表达,则会带来一般优势; my_expensive_function() in (...)明显优于my_expensive_function() == A or my_expensive_function() == B,因为前者仅计算一次值。

也就是说,如果tuple中的值不是常量文字,特别是如果命中在早期值上是常见的,in通常会更昂贵(因为它必须创建序列每次测试,即使它最终只测试第一个值。)

答案 1 :(得分:-1)

谈论功能性 - 不,这两种方法通常有所不同:请参阅https://stackoverflow.com/a/41957167/747744