Python == 在列表比较中与 or vs.



检查相等性时,以下各项的速度和功能之间是否有任何实际区别:

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

与。

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

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

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

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

如果number是一个更复杂的表达式,则一般优势就会出现;my_expensive_function() in (...)显然会胜过my_expensive_function() == A or my_expensive_function() == B,因为前者只计算一次值。

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

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

最新更新