You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两段功能近似的any生成器代码执行速度存在差异?

两段Python代码执行速度差异的原因分析

问题背景

两段Python代码功能近似且执行结果相同,但通过timeit测试发现第二个代码片段的执行速度显著快于第一个,请问其原因是什么?

代码示例

from timeit import timeit

lst = [0] * 10000000

txt1 = "any(i % 2 for i in lst)"
txt2 = "any(True for i in lst if i % 2)"

print(timeit(txt1, globals=globals(), number=2))
print(timeit(txt2, globals=globals(), number=2))

测试结果

Time : 2.112963530991692
Time : 0.9412867689970881

原因分析

核心差异在于生成器表达式的逻辑位置和any()函数的短路触发时机:

  • 对于any(i % 2 for i in lst):
    生成器会遍历列表中的每一个元素,先执行i % 2计算出布尔值,再将这个值传递给any()函数判断。由于测试列表全是0,i%2的结果始终为False,any()必须遍历完整个列表的所有元素后,才能确定没有真值,最终返回False,全程没有提前终止的机会。

  • 对于any(True for i in lst if i % 2):
    生成器把i % 2作为过滤条件,只有当i%2为True时,才会生成True这个值传入any()。因为列表里全是0,i%2永远为False,生成器不会产生任何元素,any()检测到生成器为空后会直接返回False,完全不需要遍历整个列表。

此外,第二种写法的过滤逻辑在生成器内部完成,减少了向any()传递每个i%2结果的额外开销,进一步提升了执行效率。

内容的提问来源于stack exchange,提问作者S. Jacson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:36:23