«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как прямые объявления могут помочь предотвратить ошибки имен для функций, определенных позже в Python?

Как прямые объявления могут помочь предотвратить ошибки имен для функций, определенных позже в Python?

Опубликовано 9 ноября 2024 г.
Просматривать:958

How Can Forward Declarations Help Prevent NameErrors for Functions Defined Later in Python?

Переадресация объявлений в Python для предотвращения ошибок имени для функций, определенных позже

В Python попытка вызвать функцию до ее определения может привести в NameError. Хотя реорганизация кода может показаться единственным решением, существуют альтернативные подходы.

Один из методов — предварительное объявление функции путем переноса ее вызова в отдельную функцию. Это позволяет вызывать функцию до того, как она будет определена, без возникновения ошибки NameError.

Например, следующий код завершится ошибкой:

print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

Потому что функция cmp_configs еще не определена. Чтобы объявить его вперед, мы можем обернуть вызов:

def forward_declare_cmp_configs():
    print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

forward_declare_cmp_configs()

def cmp_configs():
    ...

Теперь функцию front_declare_cmp_configs() можно вызвать до определения cmp_configs(), и исходный код будет выполняться без ошибок.

Другой сценарий, в котором полезно предварительное объявление, находится в рекурсивные функции. Например, следующий код не сработает:

def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()

Чтобы заранее объявить рекурсивные вызовы, мы можем использовать подход вложенных функций:

def spam_outer():
    def spam_inner():
        if end_condition():
            return end_result()
        else:
            return eggs()

    def eggs():
        if end_condition():
            return end_result()
        else:
            return spam_inner()

    return spam_inner()

spam_outer()()

Помните, что хотя предварительные объявления могут быть полезны, общее правило Python заключается в том, чтобы определять функцию перед ее первым использованием.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3