Вы можете использовать диспетчер dict. Например, код, на который вы ссылаетесь, может выглядеть так:
def process_number(result,tokval):
if '.' in tokval:
result.extend([
(NAME, 'Decimal'),
(OP, '('),
(STRING, repr(tokval)),
(OP, ')')
])
def process_default(result,tokval):
result.append((toknum, tokval))
dispatcher={NUMBER: process_number, }
for toknum, tokval, _, _, _ in g:
dispatcher.get(toknum,process_default)(result,tokval)
Вместо того, чтобы добавлять больше if
-блоков, вы добавляете пары ключ-значение к dispatcher
.
Это может быть более эффективным, чем вычисление длинного списка if-else
условных выражений, поскольку поиск dict равен O(1)
, но для этого требуется вызов функции. Вам нужно будет сравнить, чтобы сравнить это со многими if-else
блоками.
Я думаю, что его главное преимущество заключается в том, что он поддерживает код в небольших (э) понятных единицах.