← Все вопросы

Как запустить (вызвать) функцию в Python? И как «зациклить» скрипт, чтобы он работал постоянно?

Задан 6 дней назад413 просмотров2 ответа
5

Написал функцию, но при запуске файла вообще ничего не происходит:

def greet():
    print("Привет!")

Запускаю python app.py — пусто. Я думал, раз функция есть, она сама сработает. И второй вопрос: как сделать, чтобы скрипт не завершался сразу, а крутился постоянно (например, что-то проверял раз в секунду)? Совсем запутался.

2 ответа

7
✓ Принятый ответ — помог автору

Тут две разные вещи: определение функции и её вызов.

Когда ты пишешь def greet():, ты только описываешь, что функция делает. Питон её запоминает, но сам не запускает — это как записать рецепт, но не начать готовить. Чтобы функция реально сработала, её надо вызвать, дописав скобки ():

def greet():
    print("Привет!")

greet()          # вот теперь напечатает "Привет!"

Если есть аргументы — передаёшь их в скобки: greet("Аня"). Без скобок greet — это просто ссылка на функцию, она ничего не делает.

Теперь про «постоянную работу». Скрипт завершается, как только доходит до конца файла. Чтобы он крутился — нужен бесконечный цикл while True, а чтобы не грузить процессор на 100%, добавь паузу через time.sleep:

import time

def check():
    print("проверяю...")

if __name__ == "__main__":
    while True:
        check()
        time.sleep(1)   # пауза 1 секунда

Запускаешь из терминала: python app.py, останавливаешь — Ctrl+C.

Про if __name__ == "__main__": — это «точка входа». Код внутри выполнится только при прямом запуске файла, но НЕ когда этот файл импортируют как модуль из другого. Привыкай складывать туда запуск — это стандартная практика, она спасёт, когда начнёшь разбивать проект на несколько файлов.

1

Коротко про самую частую ловушку новичков: greet и greet() — это РАЗНОЕ.

  • greet — сама функция как объект (можно положить в переменную, передать в другую функцию).
  • greet()вызов, то есть «выполни прямо сейчас».

Классическая ошибка с потоками/таймерами:

threading.Timer(5, greet())   # БАГ: greet() выполнится сразу
threading.Timer(5, greet)     # правильно: передаём функцию, вызовет таймер

Если «ничего не происходит» — в 9 случаях из 10 ты просто забыл скобки вызова в конце файла.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект