Чи доводилось вам дублювати один і той самий фрагмент коду кілька разів або намагатися зробити програму більш читабельною? У таких ситуаціях без чітко визначених функцій не обійтися.
Функція в Python – це іменований блок коду, який виконує певну дію і може бути викликаний у будь-якому місці програми.
У цій статті ми розглянемо принципи оголошення, виклику та передачі аргументів у функції, а також покажемо, як це дозволяє підвищити гнучкість і підтримуваність коду. База для кожного пітоніста, який себе поважає.
Гайд по функціям в Python
Функція (def) у Python – це фрагмент коду, який виконує певні операції та віддає результат. Його можна написати один раз і перевикористати в усій програмі. У цій статті розповідаємо, як працюють функції в Python, чим відрізняються від процедур і навіщо їм потрібні аргументи.
Синтаксис функцій
У Python, як і в інших мовах програмування, є особливі правила для створення функцій. Якщо їх не дотримуватися, то інтерпретатор не зможе правильно обробити код і, найімовірніше, видасть помилку.
Для оголошення функції використовують ключове слово def (від англ. define – визначити, позначити).
Тут:
- ім’я_функції – назва, за допомогою якої можна викликати функцію в коді;
- аргументи – значення, які функція приймає на вхід. Це поле може бути порожнім;
- тіло_функції – набір інструкцій, що виконуються під час виклику;
- результат – значення, що функція повертає під час завершення роботи.
Важливо дотримуватися правил форматування, включно з дужками, відступами та двокрапками. Інакше програма поверне помилку.
Як викликати функцію
Функцію в Python можна створити один раз, а після викликати її в коді необмежену кількість разів. Це дає змогу економити час і скорочує кількість рядків у проєкті.
Щоб викликати функцію, треба ввести її назву і передати аргументи в дужках.
Тепер викличемо функцію для знаходження суми, яку ми створили раніше. Для цього введемо назву sum і в дужках передамо змінні a і b. Результат значення запишеться у змінну c.
Тепер розглянемо складніший приклад. Уявімо, що ми хочемо написати програму, яка запитує результати ЗНО з різних предметів, підраховує підсумок і повідомляє, наскільки добре учень впорався з іспитами.
Область видимості функцій
У Python область видимості визначає, де і які змінні можна використовувати всередині функції. Є кілька видів змінних.
Локальна область (local scope)
Всередині функції можна оголосити тимчасові змінні, які допомагають у проміжних обчисленнях. Вони існують тільки всередині тіла функції, їх не можна використовувати в інших місцях проєкту. Це і є локальна область видимості.
У прикладі нижче змінна c оголошена всередині функції sum. Її можна використовувати тільки всередині функції, якщо спробувати зробити це в іншому місці, то Python видасть помилку.
Область об’ємлющої функції (enclosing function scope)
Функції бувають вкладеними, коли одна знаходиться всередині іншої як матрьошка. У такому разі внутрішня функція має доступ до змінних, визначених у зовнішній. Навпаки, це правило не працюватиме.
Напишемо код лічильника, який підраховує кількість викликів функції.
У цьому прикладі вкладена функція використовує змінну count для обчислень. Щоб програма не прийняла змінну за локальну, як у прикладі вище, використовують ключове слово nonlocal. Це корисно, якщо, як тут, ми хочемо оновити значення змінної тільки всередині вкладеної функції.
Глобальна область (global scope)
Змінні, визначені поза функціями, знаходяться в глобальній області видимості. Це означає, що їх видно у всій програмі та вони доступні всім функціям. Якщо треба змінити значення глобальної функції всередині функції, то необхідно використовувати ключове слово global.
Наприклад, нам потрібно написати програму для кондитерської, яка веде облік виготовлених тортів. Щоразу, коли ми продаємо нові торти, ми будемо змінювати змінну cake.
Аргументи функцій
У Python функції можуть працювати з різними типами аргументів. Це робить мову гнучкою і дає змогу розв’язувати різні завдання.
Позиційні
Цей тип зустрічається найчастіше. Уявіть книжковий магазин, де вже є різні секції: «Історія», “Література”, «Програмування». Співробітники розставляють новинки за відповідними секціями. Так буде легше знайти потрібну книгу.
Так і тут: значення передаються у функцію в тому порядку, в якому зазначено у функції. Інакше виникне помилка. Якщо функція приймає кілька аргументів, потрібно розділити їх комою:
# Функція приймає два аргументи в такому порядку: секція та книжкаdef search(section, book): print (‘Ваша книжка: ‘, section, book) # Передаємо дані в тому самому порядкуsexearch
Іменовані
Якщо використовувати імена параметрів під час виклику функції, то можна передавати аргументи в довільному порядку.
Аргументи змінної довжини (*args і **kwargs)
Python дає змогу визначати функції, навіть якщо ми не знаємо, скільки аргументів вона має приймати:
- *args використовують, коли неясно, скільки позиційних аргументів у нас є. Зірочка * перед args вказує на те, що всі позиційні аргументи, передані під час виклику функції, повинні бути зібрані в кортеж tuple і присвоєні args.
- **kwargs використовують, щоб передати іменовані аргументи у вигляді словника (dictionary), коли ми не знаємо, скільки їх у нас. Дві зірочки (**) перед kwargs означають, що всі іменовані аргументи потрібно зібрати в словник і присвоїти kwargs.
Наприклад, створимо функцію greet з використанням *args і **kwargs, яка вітатиме людей, використовуючи їхні імена та додаткову інформацію про настрій.
Функція greet приймає привітання, список імен *args і додаткові параметри **kwargs. Проходить через кожне ім’я в args і формує вітальне повідомлення. Якщо в kwargs є ключ mood, то в повідомлення додається інформація про настрій.
Необов’язкові аргументи
Іноді у функціях задають значення за замовчуванням. Функція використовуватиме їх, якщо не вказано, що потрібно використовувати інший аргумент.
Наприклад, якби книжковий магазин був інтернет-магазином, кожен відвідувач отримував би однакове вітальне повідомлення. Але авторизовані користувачі, тобто ті, хто передав свої дані магазину, отримують персональне привітання.
У цьому прикладі функція greet приймає два аргументи: name і message. В аргумента message значення за замовчуванням Привіт, а в name – відвідувач. Якщо при виклику функції не вказується значення, то використовується значення за замовчуванням.
Передача за значенням і за посиланням
Одне з найчастіших запитань, що хвилює новачків у Python, – як передаються змінні у функції та методи: за значенням чи за посиланням.
- За значенням – це коли у функцію передається копія значення змінної, а не сама змінна. А отже, якщо ви вносите зміни в цей аргумент під час виклику функції, на оригінальну змінну це не впливає.
- За посиланням означає, що у функцію передається посилання на той самий об’єкт у пам’яті, що містить змінну, і будь-які зміни, внесені всередині функції в цей аргумент, відображатимуться на оригінальній змінній.
У Python аргументи передаються завжди за посиланням, але для незмінних типів даних, наприклад чисел або рядків, це може виглядати як передача за значенням. Тому що ви не можете змінити сам об’єкт всередині функції.
Для змінюваних типів даних, наприклад списків або словників, зміни, внесені всередині функції, відображаються на оригінальному об’єкті.
Тут видно, що ми внесли зміни до списку, коли взяли його як аргумент, і він тепер виглядає по-іншому.
Словник як аргументи
За допомогою словника (**kwargs) можна передавати довільну кількість іменованих аргументів.
Наприклад, змінну можна використовувати, щоб виводити персональну інформацію для кожного користувача інтернет-магазину. У когось будуть заповнені графи П. І. Б., Вік і Місце проживання, а хтось полінувався вказати місто – тоді можна вивести тільки ту інформацію, що є.
Значення, що повертаються (return)
У Python ключове слово return використовується для повернення значення з функції. Отримане значення можна далі використовувати в програмі.
У прикладі нижче функція add приймає два аргументи a і b, додає їх і за допомогою return повертає суму a + b:
Якщо не використовувати у функції ключове слово return, вона за замовчуванням поверне None.
Lambda-функції
Лямбда-функції (lambda-функції) – це безіменні функції, які можуть бути визначені в одному рядку коду. Вище ми згадали, що назву функції використовують, щоб викликати функцію повторно. Лямбда-функцію не можна перевикористати – у неї немає імені, за яким її можна викликати. Зазвичай їх використовують там, де потрібно передати невелику функцію як аргумент.
Для визначення лямбда-функцій використовують ключове слово lambda. Після нього перераховують параметри, а після двокрапки вказують вираз, результат якого функція поверне.
Як приклад розглянемо лямбда-функцію, яка перевіряє парність числа і виводить True або False. Як параметр передається змінна num, а після двокрапки вказано вираз num % 2 == 0:
Процедури та функції: відмінності
Слова «процедура» і «функція» в Python часто позначають одне й те саме – блок коду для виконання певного завдання. Однак є відмінності.
- Процедура – фрагмент коду, який виконує певне завдання або дію, але нічого не повертає. Вона може приймати аргументи, виконувати операції з цими аргументами та змінювати стан програми або виконувати деякі дії без явного повернення значення.
Наприклад, greet із прикладів вище – це процедура, яка приймає ім’я як аргумент і виводить привітання на екран. Вона не повертає жодного значення: її мета лише виконати дію. - Функція – теж фрагмент коду, який виконує певне завдання або дію. Але вона повертає результат за допомогою ключового слова return.
У Python немає суворої відмінності між процедурами та функціями. У коді їх визначають одним і тим самим ключовим словом def.
Що в підсумку
- Функції в Python оголошують за допомогою ключового слова def, за яким слідує ім’я функції, круглі дужки для аргументів і двокрапка. Тіло функції пишеться з відступом.
- Python підтримує кілька видів аргументів у функціях, включно з позиційними, іменованими, аргументами зі значенням за замовчуванням, а також змінною кількістю аргументів за допомогою *args і **kwargs.
- Локальні змінні видно тільки всередині функції, глобальні доступні в усьому коді, а вкладені функції мають доступ до змінних одна одної.
- Функції можуть повертати значення за допомогою ключового слова return. Якщо воно відсутнє, то функція повертає None.
- Крім стандартних функцій, Python підтримує створення анонімних функцій за допомогою ключового слова lambda, вони можуть містити лише один вираз.
- У Python немає явної відмінності між функціями і процедурами.
Висновок
Функції дають змогу логічно структурувати програму, виділити повторювані дії й зробити код модульним.
Це спрощує налагодження, повторне використання фрагментів і розширення функціональності без порушення загальної логіки проєкту.








