> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/main.md).

# main()

### **1. Что такое `main()`**

* В Python **нет встроенной функции `main`**, как в C/C++ или Java.
* Но **по соглашению** разработчики создают функцию `main()`, которая выполняет основную логику скрипта.
* Это помогает структурировать код и **делать скрипт импортируемым как модуль**, без автоматического запуска всего кода.

***

### **2. Стандартная конструкция**

```python
def main():
    print("Hello, World!")
    # основная логика программы

if __name__ == "__main__":
    main()
```

#### **Объяснение**

* `__name__` — встроенная переменная Python:
  * Если файл запускается как **главный скрипт**, `__name__ == "__main__"`
  * Если файл **импортируется как модуль**, `__name__` будет равно имени файла
* Таким образом, код внутри `if __name__ == "__main__":` **выполняется только при прямом запуске**.

***

### **3. Пример с функциями**

```python
def add(a, b):
    return a + b

def main():
    result = add(5, 3)
    print(f"Result: {result}")

if __name__ == "__main__":
    main()
```

**Вывод при запуске скрипта:**

```
Result: 8
```

Если модуль импортировать в другой файл, `main()` не будет вызван автоматически.

***

### **4. Применение в автотестах**

* Организация скриптов для запуска тестов вручную.
* Структурирование **утилит для тестов** (логирование, генерация данных).
* Позволяет **повторно использовать функции** в других тестах, без запуска всего скрипта.

```python
# test_utils.py
def create_test_user():
    return {"username": "test", "password": "123"}

def main():
    user = create_test_user()
    print(user)

if __name__ == "__main__":
    main()
```

* Если импортировать `create_test_user` в другой модуль, `main()` не выполнится.

***

💡 **Вывод:**

* `main()` — это соглашение для **центральной точки запуска кода**.
* `if __name__ == "__main__"` позволяет **разделять выполнение при запуске и импортирование**.
