gpt4 book ai didi

python - 为什么 `try ... except` 比 `if` 快?

转载 作者:行者123 更新时间:2023-11-28 21:14:18 26 4
gpt4 key购买 nike

在我的代码中,我有一个列表 l,我正在从中创建一个列表字典。 (我将具有相同 key 的对象分组)。通过 try 语句和 if 条件实现它,我在 line_profiler 中注意到前者似乎更有效:

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================

293 44378450 59805020 1.3 16.9 for element in l:

# stuff that compute 'key' from 'element'

302 2234869 2235518 1.0 0.6 try:
303 2234869 82486133 36.9 23.3 d[key].append(element)
304 57358 72499 1.3 0.0 except KeyError:
305 57358 1758248 30.7 0.5 d[key] = [element]

对比:

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================

293 44378450 60185880 1.4 14.0 for element in l:

# stuff that compute 'key' from 'element'

307 2234869 81683512 36.5 19.1 if key in d.keys():
308 2177511 76393595 35.1 17.8 d.get(key).append(element)
309 else:
310 57358 1717679 29.9 0.4 d[key] = [element]

我知道使用 try 时,您只会在引发异常时进入 except(因此除了少数异常(exception),整体成本低于测试条件是有道理的每次),但在这里,即使是 Time per hit 异常(1.3+30.7 µs)也比测试条件(36.5 µs)慢。我认为引发异常比检查字典中是否有键(in 只是测试散列键,不是吗?这不是行搜索)成本更高。那是为什么?

最佳答案

额外的运行时来自 .keys() 调用。如果你想阻止额外的调用并仍然使用 ifelse,请尝试这样的事情:

obj = d.get(key)
if obj:
obj.append(element)
else:
d[key] = [element]

或者,您可以使用在后台执行此操作的 defaultdict。示例:

from collections import defaultdict
d = defaultdict(list)
d['123'].append('abc')

关于python - 为什么 `try ... except` 比 `if` 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804691/

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