python 列表推导 为什么快_python – 列表推导和函数函数比“for循环”快?

以下是基于经验的粗略准则和有根据的猜测。你应该对你的具体用例进行计时或分析,以获取硬数字,这些数字有时可能不同意以下。

列表解析通常比精确等价的for循环(实际构建列表)快一点,很可能是因为它不需要在每次迭代时查找列表及其append方法。然而,列表解析仍然执行字节码级循环:

>>> dis.dis()

1 0 BUILD_LIST 0

3 LOAD_FAST 0 (.0)

>> 6 FOR_ITER 12 (to 21)

9 STORE_FAST 1 (x)

12 LOAD_FAST 1 (x)

15 LIST_APPEND 2

18 JUMP_ABSOLUTE 6

>> 21 RETURN_VALUE

使用列表解析代替不构建列表的循环,无意义地累积无意义值的列表,然后将列表离开,通常较慢,因为创建和扩展列表的开销。列表推导不是魔法,本质上比一个好的老循环更快。

至于功能列表处理功能:虽然这些是用C编写的,并且可能优于用Python编写的等效函数,但它们不一定是最快的选项。如果函数以C语言编写,则预期会有一些加速。但是大多数情况下使用lambda(或其他Python函数),重复设置Python堆栈帧等的开销,可以节省任何费用。简单地在线执行相同的工作,没有函数调用(例如列表解析而不是地图或过滤器)通常稍快。

Suppose that in a game that I’m developing I need to draw complex and huge maps using for loops. This question would be definitely relevant, for if a list-comprehension, for example, is indeed faster, it would be a much better option in order to avoid lags (Despite the visual complexity of the code).

有机会是,如果这样的代码还不够快,当写在良好的非“优化”的Python,没有量的Python级微优化将使它足够快,你应该开始考虑放弃C.虽然广泛微优化通常可以加快Python代码的速度,有一个很低的(绝对条件)的限制。此外,即使在你达到上限之前,它也变得更加节省成本(15%的加速,而300%的加速与同样的努力)咬住子弹和写一些C.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值