我假设 try / except 工作流程比 if / then 工作流程更快,用于简单的操作“尝试从 list_l 中删除 x”。在下面的示例中,例外失败(x 不在 list_l 中)比权限请求(如果 x 在 list_l 中)花费更多的时间,即使有 16.6% 的时间发生异常。为什么?
以下是我编写的测试及其结果:
import random, time, timeit
class Timer(object):
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.end = time.time()
self.secs = self.end - self.start
self.msecs = self.secs * 1000 # millisecs
def a_function():
a_list = list(xrange(10))
choice_list = list(xrange(12))
choice = random.choice(choice_list)
try:
a_list.remove(choice)
except ValueError:
pass
def b_function():
a_list = list(xrange(10))
choice_list = list(xrange(12))
choice = random.choice(choice_list)
if choice in a_list:
a_list.remove(choice)
with Timer() as a:
print('test_a', timeit.timeit("a_function()", number=10000, setup="from __main__ import a_function"))
with Timer() as b:
print('test_b', timeit.timeit("b_function()", number=10000, setup="from __main__ import b_function"))
结果:
1st attempt: ('test_a', 0.029724836349487305)('test_b', 0.027068138122558594)
2nd attempt: ('test_a', 0.02960801124572754)('test_b', 0.026785850524902344)
3rd attempt: ('test_a', 0.029654979705810547)('test_b', 0.02665996551513672)
此外,如果我将 choice_list 范围增加到 20,则差异会扩大,因为异常发生得更频繁。如果 python 强烈要求-原谅-不允许,为什么失败似乎要花费很多时间?