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

为何等价但代码更长的Python函数运行效率更高?

为什么代码更短的Python函数反而更慢?

你测试的两个功能等价的函数,出现了代码更短但性能更差的情况,核心原因在于额外的对象创建开销,具体分析如下:

两个函数的核心差异

先看你提供的两个函数代码:

def triplicate_1(nums):
    for i in nums:
        si = str(i)
        sum = 0
        for j in si:
            sum += int(j)
        if sum % 3 == 0:
            pass
        else:
            pass

def triplicate_2(nums):
    for i in nums:
        if sum([int(j) for j in str(i)]) % 3:
            pass
        pass
  • triplicate_1:直接用循环累加每个数字的各位和,全程只用到几个局部变量,没有额外创建容器类对象。
  • triplicate_2:用[int(j) for j in str(i)]创建了一个临时列表,再把这个列表传给sum()计算总和。每处理一个数字,都会创建一次这个临时列表,用完后还要触发垃圾回收。

性能差异的根源

Python中创建列表是有明显开销的:

  1. 需要为列表分配内存空间;
  2. 列表中的每个元素也要单独存储;
  3. 临时列表使用完毕后,Python的垃圾回收机制需要回收这块内存。

当测试次数很少(比如10000次)时,这种额外开销可能被系统的其他因素(比如CPU缓存、进程调度波动)掩盖,出现偶然的结果偏差;但当测试次数足够多(比如100万次)时,统计规律会凸显,triplicate_1没有额外列表开销的优势就会稳定体现出来,所以大部分场景下它的耗时更短。

补充优化建议

如果想兼顾代码简洁和性能,可以用生成器表达式替代列表推导式,避免创建临时列表:

def triplicate_optimized(nums):
    for i in nums:
        if sum(int(j) for j in str(i)) % 3:
            pass
        pass

生成器表达式是惰性计算的,不会一次性创建完整列表,能大幅减少内存开销和垃圾回收的负担,性能会更接近triplicate_1。

内容的提问来源于stack exchange,提问作者Ramhand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:11