gpt4 book ai didi

python - 为什么删除 else 会减慢我的代码速度?

转载 作者:IT老高 更新时间:2023-10-28 20:21:47 26 4
gpt4 key购买 nike

考虑以下函数:

def fact1(n):
if n < 2:
return 1
else:
return n * fact1(n-1)

def fact2(n):
if n < 2:
return 1
return n * fact2(n-1)

它们应该是等价的。但存在性能差异:

>>> T(lambda : fact1(1)).repeat(number=10000000)
[2.5754408836364746, 2.5710129737854004, 2.5678811073303223]
>>> T(lambda : fact2(1)).repeat(number=10000000)
[2.8432059288024902, 2.834425926208496, 2.8364310264587402]

没有 else 的版本会慢 10%。这是相当重要的。为什么?

最佳答案

这里发生的是 fact2 与模块全局变量中的 __name__ 存在哈希冲突。这使得全局 fact2 的查找变得稍微慢了一点。

>>> [(k, hash(k) % 32) for k in globals().keys() ]
[('__builtins__', 8), ('__package__', 15), ('fact2', 25), ('__name__', 25), ('fact1', 26), ('__doc__', 29)]

即与 Why is early return slower than else? 相同的答案除了哈希冲突与 __builtins__

关于python - 为什么删除 else 会减慢我的代码速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com