繁体   English   中英

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

[英]Python == with or vs. in list comparison

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

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

对比

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

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

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

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

如果number是一个更复杂的表达式,则具有普遍优势; my_expensive_function() in (...)显然会优于my_expensive_function() == A or my_expensive_function() == B ,因为前者只计算一次值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM