gpt4 book ai didi

python - 当 else 完成得最多时,制作 if-elif-elif-else 语句的最有效方法是什么?

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

我有一个 in if-elif-elif-else 语句,其中 99% 的时间执行 else 语句:

if something == 'this':
doThis()
elif something == 'that':
doThat()
elif something == 'there':
doThere()
else:
doThisMostOfTheTime()

这个构造做了很多,但由于它在遇到 else 之前遍历了所有条件,我觉得这不是很有效,更不用说 Pythonic 了。另一方面,它确实需要知道是否满足这些条件中的任何一个,因此无论如何它都应该对其进行测试。

有谁知道这是否以及如何更有效地完成,或者这仅仅是最好的方法吗?

最佳答案

代码...

options.get(something, doThisMostOfTheTime)()

...看起来应该更快,但实际上比 if ... elif ... else 慢构造,因为它必须调用一个函数,这在紧密循环中可能是一个显着的性能开销。

考虑这些例子...

1.py

something = 'something'

for i in xrange(1000000):
if something == 'this':
the_thing = 1
elif something == 'that':
the_thing = 2
elif something == 'there':
the_thing = 3
else:
the_thing = 4

2.py

something = 'something'
options = {'this': 1, 'that': 2, 'there': 3}

for i in xrange(1000000):
the_thing = options.get(something, 4)

3.py

something = 'something'
options = {'this': 1, 'that': 2, 'there': 3}

for i in xrange(1000000):
if something in options:
the_thing = options[something]
else:
the_thing = 4

4.py

from collections import defaultdict

something = 'something'
options = defaultdict(lambda: 4, {'this': 1, 'that': 2, 'there': 3})

for i in xrange(1000000):
the_thing = options[something]

...并注意他们使用的 CPU 时间...

1.py: 160ms
2.py: 170ms
3.py: 110ms
4.py: 100ms

...使用 time(1) 中的用户时间.

选项 #4 确实有额外的内存开销,即为每个不同的键未命中添加一个新项目,因此,如果您期望不同的键未命中数不限,我会选择选项 #3,它仍然是对原始结构的显着改进。

关于python - 当 else 完成得最多时,制作 if-elif-elif-else 语句的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166074/

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