Я составляю обработчик для обработки различных типов данных. Вот мое текущее решение:Как эффективно инкапсулировать обработчики в Python?
def get_handler_by_type(type):
def handler_for_type_A:
...
#code for processing data type A
def handler_for_type_B:
...
#code for processing data type B
def handler_for_type_C:
...
#code for processing data type C
handler_map = {type_A: handler_for_type_A,
type_B: handler_for_type_B,
type_C: handler_for_type_C,
}
return handler_map(type)
Однако, это кажется довольно неэффективным, так как я буду называть get_handler_by_type часто и каждый раз, когда он вызывается, словарь будет построен заново.
Я знаю, что я мог бы сделать это вместо того, чтобы:
def handler_for_type_A:
...
#code for processing data type A
def handler_for_type_B:
...
#code for processing data type B
def handler_for_type_C:
...
#code for processing data type C
handler_map = {type_A: handler_for_type_A,
type_B: handler_for_type_B,
type_C: handler_for_type_C,
}
def get_handler_by_type(type, handler_map = handler_map):
return handler_map(type)
Но это довольно уродливые, на мой взгляд. Потому что у меня есть handler_for_type_Xs и handler_map, которые загрязняют глобальное пространство. Есть ли способ сделать это как эффективно, так и изящно?
Спасибо за любые ввода.
Что случилось с 'handler_for_type_A' i n глобальное пространство имен? –
Если нет _lot_ обработчиков, вряд ли это будет горячая точка. –
@WaleedKhan: Как указал гниблер, будет много обработчиков. На самом деле я пишу программу, которая анализирует пакеты Bluetooth Low Energy. Существуют разные типы заголовков, и каждая полезная нагрузка, связанная с заголовком, должна обрабатываться по-разному. Я не хочу, чтобы все эти обработчики отображались в глобальном пространстве. – foresightyj