[英]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.