Почему в Python нет основной функции? Почему я не рекомендую писать основную функцию?

Python
Почему в Python нет основной функции? Почему я не рекомендую писать основную функцию?

Нет никаких сомнений, что в Python нет так называемой основной функции входа, но в некоторых статьях в Интернете часто упоминается «главная функция Python», «рекомендуется написать основную функцию»…

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

Поговорим о рубрике «Почему Python» в этом выпуске.Почему в Python нет основной функции?

Прежде чем мы начнем, давайте ответим на эти два вопроса:Что вы подразумеваете под "основной функцией"? Почему некоторые языки программирования заставляют писать основную функцию?

Некоторые языки программирования используют функцию main в качестве точки входа выполнения программы, например, C/C++, C#, Java, Go и Rust и т. д. Они имеют определенные значения:

  • Имя основной функции обязательно, то есть должна быть главная функция
  • Основная функция может быть не более одной, что означает, что запись программы уникальна.
  • Формат синтаксиса имеет определенные требования и имеет относительно фиксированный шаблон.

Зачем навязывать основную функцию входа?

Эти языки компилируемые, и код нужно компилировать в исполняемые бинарные файлы, чтобы операционная система/лаунчер могла найти начальную точку программы, эту функцию надо согласовать. Проще говоря, в большом количестве кода вам нужно определить значительное начало, которое можно использовать для выполнения.

Нетрудно заметить, что главная функция — важная и неотъемлемая часть этих языков.

Однако, когда мы снова смотрим на Python, ситуация совсем другая.

  • Python — это интерпретируемый язык, то есть скриптовый язык, запущенный процесс запускается сверху вниз, построчно, а это значит, что его начальная точка известна.
  • Каждый файл .py представляет собой исполняемый файл, который можно использовать в качестве файла входа для всей программы, то есть вход программы является гибким и переменным, и нет никаких соглашений, которым необходимо следовать.
  • Иногда при запуске проекта Python без указания файла ввода (обычно в командной строке, например «python -m http.server 8000») он может существовать__main__.pyфайл, пакет, в котором он находится, выполняется как "файл"

Короче говоря, это означает, что язык сценариев Python отличается от компилируемого языка тем, что он может выбирать гибкий метод выполнения, будь то на уровне отдельного модуля (например, файла .py) или на уровне пакет, состоящий из нескольких модулей. , в отличие от других языков, которые не могут быть выполнены без согласованной записи.

Другими словами, Python не требует на уровне синтаксиса оговаривать, что программисты должны определять юниформ-запись (будь то функция, класс или что-то в этом роде).

У некоторых студентов могут возникнуть сомнения, потому что они часто видят или пишут следующий код:

# main 里是某些主体代码
def main():
    …… 
 
if __name__ == '__main__':
    main()

Разве это не основная функция Python? Я думаю, что так подумают многие студенты!

Не слишком! Не слишком!

За исключением того, что имя функции «main», оно не имеет ничего общего с ортодоксальной основной функцией, которую мы представили ранее, ни обязательной, ни необходимой для определения порядка выполнения программы. Без него это не вызывает никаких проблем с синтаксисом.

Причина, по которой некоторые инсайдеры хотят назвать функцию «основной», на самом деле состоит в том, чтобы подчеркнуть ее «основной» статус и искусственно расположить ее как первую функцию для выполнения. Они могут подумать, что функции, названные таким образом, легче запомнить.

Почему некоторые знающие люди хотят писатьif __name__ == '__main__', вы можете указать, что main() следует запускать только тогда, когда текущий скрипт выполняется напрямую, а не когда ожидается, что он будет импортирован в другие модули.

Для этих «инсайдеров» есть доля правды.

Однако лично я не рекомендую такой способ написания, а иногда даже очень отвратительный!

Самый наглядный пример: всего несколько десятков строчек кода, либо всего один файл скрипта для реализации простой функции (маленький краулер, отрисовка картинки с черепахой и т.п.), но все они написаны в прежнем стиле .

Меня тошнит каждый раз, когда я вижу такой бездумно громоздкий код. Зачем писать эту строку оператора if? Если возможно, основная функция должна быть разделена, а не упакована в функцию!

Мой личный опыт таков:

  • Сломайте инерционное мышление и напишите аутентичный код. Основная функция входа уникальна для некоторых языков, ее нельзя использовать в Python, она должна понимать особенности языков сценариев и писать лаконично и элегантно.
  • Используйте main.py вместо main(). Поскольку модуль выполнения программы Python на самом деле является файлом сценария, а не функцией или классом, рекомендуется назвать входной файл main.py, а внутренние функции определяются в соответствии с требованиями.
  • Если возможно, используйте__main__.pyкак входной файл. Этот файл используется вместе с параметром "-m" командной строки, что очень полезно. Рекомендуемое чтение:Типичное использование, принципиальный анализ и эволюция -m в Python
  • Писать не рекомендуетсяif __name__ == '__main__'. Во-первых, если файл один, записывать не рекомендуется, так как нет возможности экспорта. Во-вторых, при наличии нескольких файлов крайне не рекомендуется прописывать это предложение в файле входа (main.py), логика кода этого файла должна быть доработана, его содержимое по идее не должно экспортироваться в другие модули для использовать, потому что это отправная точка! Наконец, не рекомендуется писать многофайловые не входные файлы, потому что самый большой эффект от написания этого суждения в не входных файлах заключается в написании некоторого тестового кода, но тестовый код должен быть отделен и записан в специальный каталог или файл.

Резюме: в этой статье сначала объясняется, что такое основная функция входа, и почему некоторые языки требуют написания основной функции; затем объясняется, почему Python не нужно писать основную функцию; наконец, она предназначена для некоторых людей. инерционных недоразумений, делюсь своим личным опытом четырехточечного программирования.

Эта статья относится к серии статей «Почему Python» (подготовленной Python Cat), которая в основном посвящена таким темам, как синтаксис, дизайн и разработка Python. Она пытается показать очаровательное очарование Python, начиная с вопросов «почему». . Некоторые темы будут иметь видеоверсию, смотрите на станции B, смотрите по адресу:Адрес видео

публика【Питон кот], в этом выпуске публикуются высококачественные серии статей, в том числе серия «Почему Python», серия «Философия кошек», серия «Расширенный Python», серия рекомендаций по хорошим книгам, технические статьи, высококачественные рекомендации и перевод на английский язык и т. д. Добро пожаловать на внимание.