Блок
A try/except
для получения ключа или значения по умолчанию будет намного быстрее, чем все другие альтернативы. Например,
from time import time
t = time()
for i in range(1000000):
v = __builtins__['int'] if 'int' in __builtins__ else None
print(time() - t)
t = time()
for i in range(1000000):
v = __builtins__.get('int', None)
print(time() - t)
t = time()
for i in range(1000000):
try:
v = __builtins__['int']
except KeyError:
v = None
print(time() - t)
Результаты:
0.12224698066711426
0.15873217582702637
0.0927286148071289
Первый намного медленнее, потому что Python в основном получает ключ дважды. Один раз через __contains__
, затем __getitem__
. Второй медленнее, потому что Python выполняет некоторую внутреннюю проверку, в то время как try/catch
идет прямо к точке или неудаче.
Проще просить прощения, чем разрешения.