检查相等性时,以下速度和功能之间是否存在实际差异:
number = 'one'
if number == 'one' or number == 'two':
VS
number = 'one'
if number in ['one', 'two']:
答案 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