Коротко: функція — це названий блок коду, який можна викликати скільки завгодно разів замість того, щоб переписувати ті самі рядки. Вона оголошується словом def, може приймати дані через параметри в дужках і повертати результат словом return. Плутанина майже завжди росте з одного місця: діти вважають, що print() усередині функції — це і є результат, хоча реальний результат — те, що функція повертає назовні.

До функцій дитина на курсі Python уже писала умови, цикли й працювала зі списками — кожна задача розв'язувалась одним шматком коду згори вниз. Функція змінює цей підхід: код розбивається на іменовані частини, кожна відповідає за одну дію, і одну частину можна викликати з іншої.

Як оголосити функцію: синтаксис по кроках

Мінімальна функція виглядає так: def pryvitaty():, а на наступному рядку з відступом — те, що вона робить, наприклад print("Привіт!"). Слово def каже Python «далі йде опис дії», ім'я після нього — назва, за якою цю дію потім викликають, дужки — місце для вхідних даних. Викликати оголошену функцію — означає написати її ім'я з дужками в іншому місці коду: pryvitaty().

Функція без параметрів і з ними
ЗаписЩо робить
def pryvitaty():завжди виконує одне й те саме
def pryvitaty(imya):приймає ім'я й використовує його всередині
pryvitaty("Олено")викликає функцію з конкретним значенням

Параметри: як функція отримує дані ззовні

Параметр — це ім'я, яке функція отримує в дужках при оголошенні, а аргумент — конкретне значення, яке передають при викликy. У def dodaty(a, b): return a + b параметрів два, і функцію можна викликати з будь-якими числами: dodaty(3, 5) поверне 8, dodaty(10, 20) — 30. Той самий код працює для різних даних, і саме це головна причина писати функції — не повторювати логіку, а параметризувати її.

Чому print() усередині функції — не те саме, що return?

Тому що print() показує значення на екрані й одразу забуває його, а return передає значення назовні, і його можна зберегти в змінну чи використати в обчисленні. Функція def kvadrat(x): print(x * x) покаже число, але спроба написати rezultat = kvadrat(4) дасть rezultat, що дорівнює None — функція нічого не повернула, вона лише вивела текст. Якщо замінити print на return, rezultat отримає саме число 16, яке можна передати далі в код.

Значення за замовчуванням: коли параметр можна не вказувати

Параметру можна одразу задати значення на випадок, коли його не передали: def pryvitaty(imya="друже"):. Виклик pryvitaty() без аргументів використає слово «друже», а pryvitaty("Максим") перезапише його на ім'я. Цей приклад на курсі показують одразу після базового синтаксису — він пояснює, чому вбудовані функції Python, наприклад print(..., sep=" "), можна викликати і з усіма параметрами, і без частини з них.

Локальні змінні: чому функція не бачить те, що поза нею

Змінна, створена всередині функції, існує лише під час її виконання і зникає, щойно функція завершилась — це називається локальна область видимості. Якщо написати def rakhuvaty(): x = 10, а потім спробувати поза функцією надрукувати print(x), Python видасть помилку NameError: змінної x за межами функції просто не існує. Це не збій, а захист: завдяки такій ізоляції дві різні функції можуть мати власну змінну з однаковим іменем x і не заважати одна одній.

Є й протилежний бік: функція бачить змінні, оголошені поза нею, якщо не створює свою з тим самим іменем. Але на практиці на курсі радять передавати потрібні дані через параметри, а не через зовнішні змінні — так функцію можна переносити в інший проєкт без зміни решти коду.

Функція, що викликає іншу функцію

Функції можна комбінувати, і саме тут стає видно, навіщо вони насправді потрібні. Нехай є функція def parne(chyslo): return chyslo % 2 == 0, яка перевіряє, чи число парне, і повертає True або False. Другу функцію можна написати так, щоб вона використала першу: def rakhuvaty_parni(spysok):, а всередині — цикл for зі списків, який для кожного елемента запитує parne(elem) і рахує, скільки разів відповідь була True. Так з двох простих функцій складається третя, складніша задача — і це саме та звичка, яку курс розвиває: не писати одну велику функцію на все, а кілька маленьких, кожна з яких легко перевіряється окремо.

Чи можна передати функції список, а не одне число?

Так, параметром може бути будь-який тип даних — число, рядок, список чи навіть інша функція. Функція def seredne(spysok_chysel): return sum(spysok_chysel) / len(spysok_chysel) приймає цілий список і повертає одне число — середнє значення. Для дитини, яка вже проходила списки, це природний наступний крок: той самий список, який раніше тільки виводили на екран чи перебирали циклом, тепер можна віддати функції одним аргументом.

Де на курсі з'являється ця тема

Функції — одна з перших тем після циклів, іде одразу за матеріалом зі статті про цикл for у Python, і до того, як дитина переходить до списків і словників, про які докладно написано в довіднику зі списків і словників. Порядок не випадковий: без функцій код зі списками швидко перетворюється на довгу стіну повторів, а після них одну й ту саму обробку можна винести в один виклик.

Типові помилки з функціями

Забути return і здивуватися, чому результат — None, трапляється найчастіше. Друга за популярністю помилка — переплутати відступи: рядок, який має бути всередині функції, написаний на тому самому рівні, що й def, і Python сприймає його як окремий, не пов'язаний з функцією код. Третя — назвати параметр так само, як змінну поза функцією, і дивуватися, чому зміна всередині функції «не видно» зовні: параметр живе лише в межах функції, і це свідома особливість мови, а не помилка.

Ще одна поширена плутанина: виклик функції без дужок

Рядок pryvitaty без дужок не викликає функцію — він лише посилається на неї як на об'єкт, і Python нічого не виконає. Побачити результат можна тільки написавши дужки: pryvitaty(). На письмі різниця в два символи, а в поведінці — різниця між «запустити дію» і «просто назвати її», і це одна з тих помилок, яку легко не помітити, доки програма мовчки не робить того, що очікувалося.

Чи обов'язково функції повертати значення?

Ні. Функція без return просто виконує дії — друкує текст, малює фігуру, змінює список — і повертає None за замовчуванням. Це нормально для функцій, мета яких — зробити щось, а не обчислити число. return потрібен тоді, коли результат функції знадобиться далі в коді, а не тільки на екрані.

Навіщо це далі в програмі курсу

Функції — міст до теми класів і об'єктів, яку на старшому ступені розбирає стаття про ООП у Python: клас, по суті, групує кілька функцій навколо одних даних. Дитина, яка впевнено пише функції з параметрами й return, переходить до класів без зайвого стресу — це той самий принцип, тільки з іншою організацією коду.

Головне правило для практики простe: якщо один і той самий код копіюється в програмі більше одного разу — це сигнал виносити його у функцію. Решта деталей синтаксису стає зрозумілою за два-три заняття практики, а не за одне теоретичне пояснення.

На заняттях цю тему закріплюють не переказом правил, а переписуванням уже готового коду: дитина бере проєкт з попередньої теми, де та сама дія повторена кілька разів підряд, і виносить її в одну функцію з параметрами. Різниця видна відразу — замість десяти однакових блоків лишається один виклик для кожного випадку, і правку достатньо внести один раз.