捕获异常 非常 昂贵,但是异常应该是 例外的 (读取,不经常发生)。如果例外情况很少,try/catch
则比LBYL要快。
下面的示例在密钥存在和不存在时使用异常和LBYL对字典密钥进行计时:
import timeit
s = []
s.append('''\
try:
x = D['key']
except KeyError:
x = None
''')
s.append('''\
x = D['key'] if 'key' in D else None
''')
s.append('''\
try:
x = D['xxx']
except KeyError:
x = None
''')
s.append('''\
x = D['xxx'] if 'xxx' in D else None
''')
for i,c in enumerate(s,1):
t = timeit.Timer(c,"D={'key':'value'}")
print('Run',i,'=',min(t.repeat()))