Упреждающее объявление функций для предотвращения исключений NameError
Python требует, чтобы функции были определены перед их использованием. Это может привести к исключению NameError, когда функции определяются позже в коде, например, при сортировке списка с использованием пользовательской функции «cmp».
Чтобы избежать этой проблемы, можно «переслать объявление» " функция до того, как она определена. Это включает в себя перенос вызова функции в отдельную функцию:
def sort_list():
sorted_list = sorted(mylist, cmp=cmp_configs)
print("\n".join([str(bla) for bla in sorted_list]))
def cmp_configs(...) -> int:
...
Определив sort_list перед cmp_configs, Python может «видеть» предварительное объявление и избежать исключения NameError.
Рекурсивные функции и прямое объявление
В случае рекурсивных функций, где определение одной функции зависит от другой, может оказаться полезным предварительное объявление внутри одной и той же функции:
def spam():
def eggs():
if end_condition():
return end_result()
else:
return spam()
if end_condition():
return end_result()
else:
return eggs()
spam()
Объявляя яйца в спаме, Python может распознать имя функции и безопасно выполнить рекурсивный вызов.
Заключение
Вперед -объявление функций путем переноса их вызовов в отдельные функции или использования внутренних функций в рекурсивных функциях обеспечивает обходной путь для предотвращения исключений NameError, когда функции определяются позже в коде. Однако важно отметить, что организация кода и избежание циклов зависимостей между функциями всегда являются хорошей практикой.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3