Если это элемент конфигурации, вам не нужно обращаться к нему очень часто (поэтому ваши требования к эффективности могут быть сомнительными). Настройте один раз и забудьте об этом (например, установите self.is_guest_installer_network = True
).
Если вы не можете забыть об этом, это будет зависеть от вероятности присутствия записи в вашем словаре. Если более вероятно, что предмет отсутствует, вероятно, будет лучше, если вы сделаете что-то вроде следующего. Вы получаете некоторое поведение ярлыка, если элемент отсутствует, другой файл конфигурации просматривается только один раз (для проверки существования и для значения после поиска.
def check_guest_installer_network(nrec):
other_config = nrec.get("other_config", None)
return other_config is not None and other_config.get('is_guest_installer_network', False)
Если более вероятно, что предмет есть, то ленивый подход попытка / исключение может быть более подходящим. Что касается сохраненной производительности проверки, это перевесит дополнительные затраты производительности, когда исключение действительно необходимо обработать.
def check_guest_installer_network(nrec):
try:
return nrec["other_config"]['is_guest_installer_network'] == "true"
except KeyError:
return False
В конце концов, если эта проверка действительно оказывает существенное влияние на общую производительность, вы должны поместить эту переменную там, где она лучше доступна, чем во вложенном словаре, например. поместите его в глобальную переменную-член класса один раз, а потом наслаждайтесь дешевыми и простыми проверками.
Вам следует взглянуть на модуль cprofile , чтобы убедиться, что этот поиск действительно является узким местом вашего программного обеспечения, что стоит усилий по оптимизации. И вы должны взглянуть на модуль timeit , чтобы выбрать наиболее эффективное решение для вашей проблемы.