Настоящая автоматизация
Функции переиспользуют набор действий столько раз, сколько нужно — без копирования кода.
Настоящая автоматизация
Циклы из главы 10 автоматизировали повторение одного и того же кода. Но что если один и тот же набор действий нужен в разных местах программы — не подряд, а время от времени? Копировать код каждый раз — плохая идея: любое исправление придётся вносить во все копии. Функции решают эту проблему раз и навсегда.
Наша первая функция
def privetstvie():
print("Привет, Python!")
privetstvie()
privetstvie()
privetstvie()
Анатомия def
| Часть | Значение |
|---|---|
def | ключевое слово: «дальше идёт определение функции» |
privetstvie | имя функции — по нему функцию будут вызывать |
() | список параметров (здесь пуст — функция не принимает данных) |
: | начало тела функции |
print(...) | тело — код с отступом, который выполнится при вызове |
def определяет функцию — записывает её код,
но пока не выполняет его. Функция выполняется только тогда, когда вы её
вызываете — по имени со скобками: privetstvie().
def privetstvie(): ... и не добавить privetstvie() ниже, программа не выведет ничего — Python просто запомнит функцию, но не запустит её.Определение выполняется один раз, по-особому
Когда Python доходит до строки def privetstvie():, тело
функции не выполняется как обычные последовательные команды. Вместо этого
создаётся объект функции, привязанный к имени privetstvie — и
выполнение программы продолжается СРАЗУ ПОСЛЕ определения. Тело запустится только позже,
когда произойдёт вызов.
Функция как объект
Мы уже знаем модель «имя указывает на объект» (глава 3). Функция — не исключение:
print(privetstvie) # <function privetstvie at 0x...> — сам объект функции
privetstvie() # Привет, Python! — а это ВЫЗОВ