Функції

Можливості мови Python передбачають функціональне програмування. Для його реалізації використовують підпрограми у вигляді функцій.

Функція – це фрагмент коду, призначений для розв'язання певної задачі, до якого можна багаторазово звертатись з різних місць основної програми. Вона повертає у місце виклику певне значення, що є результатом її виконання.

Ось приклад простої функції:

def hello(name):
  print('Hello, %s' % name)

Назва цієї функції – hello. Вона містить один параметр name. Тіло цієї функції – це команди, які розташовані після символу двокрапки. Зверніть увагу, що тіло функції містить відступ від початку рядка, який можна створити, натиснувши клавішу Tab. Якщо в межах основної програми написати команду hello('Vira'), тобто здійснити виклик функції з параметром ‘Vira’, то отримаємо такий результат: Hello, Vira.

Отже, будь-яка функція має такий загальний вигляд:

def <назва> ([параметри]):
      <блок команд>
      [return <результат>]

Параметр (також називають аргументом) – це змінна, яка отримує конкретне значення під час звернення до функції. Параметри вказувати не обов'язково, але при цьому круглі дужки опускати не можна.

Інструкція return повертає результат виконання функції в основну програму. Наведемо приклад використання нижче.

Функція:

def заощадження(кишенькові, зароблені, витрачені):
  return кишенькові + зароблені - витрачені

Виклик функції у межах основної програми:

print(заощадження(50, 100, 20))

Результат:

130

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

Локальна змінна – це змінна, яка оголошена всередині функції. Локальні змінні доступні тільки всередині функції, у якій їх було створено.

Глобальна змінна – це змінна, яка оголошена в основній програмі, поза межами функцій. Глобальні змінні є видимими для будь-якої частини програми, зокрема, всередині функцій.

Зауваження: Локальну змінну, що оголошена в середині функції, можна зробити видимою для усією програми, написавши перед нею службове слово global. Тоді значення цієї змінної збережеться і після завершення роботи функції, і не буде знищено, як це стається з усіма локальними змінними.

У мові Python розрізняють функції з довільною кількістю аргументів, з обов'язковими і необов'язковими параметрами, з позиційними та ключовими параметрами, лямбда-функції.

Функції з довільною кількістю аргументів

Для того, щоб у функцію передавати змінну кількість аргументів, перед списком аргументів ставлять знак *. Приклад:

def func(*args):
  print(args)

У цьому випадку параметр args є кортежем. У цьому можна переконатися, викликавши функцію таким чином

func('word', 8, 9)

і отримавши результат ('word', 8, 9).

Функції з обов'язковими та необов'язковими параметрами

Необов'язковими (типовими або заданими по замовчуванню) називають параметри, які будуть використовуватися функцією, якщо вони явно не задані під час виклику цієї функції. Для того, щоб задати значення формального параметра по замовчуванню, необхідно використати операцію присвоювання. У прикладі, який наведений нижче, параметри x та y – обов'язкові, z – необов'язковий (заданий по замовчуванню).

def func(x, y, z = 8):
...

Отже, частина формальних аргументів функції можуть бути як обов'язковими, так і не обов'язковими. Потрібно пам'ятати, що спочатку задаються параметри, які не мають типових значень, а в кінці – необов'язкові параметри, визначені по замовчуванню.

Позиційні та ключові параметри

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

def function(argument1, argument2, argument3):
...

Здійснимо виклик цієї функції таким чином:

function(argument1 = a1, argument2 = a2, argument3 = a3).

Аргументи (a1, a2, a3) називаються ключовими. Вони відрізняють від позиційних тим, що можуть перелічуватись у довільному порядку під час виклику функції. Наприклад, виклик може мати такий вигляд:

function(argument3 = a3, argument1 = a1, argument2 = a2).

Лямбда-функції

У Python можна використовувати функції без імені. Вони носять назву лямбда-функції і описуються за допомогою службового слова lambda таким чином:

lambda аргумент1, ..., аргументN: вираз, що використовує аргументи

Наведемо приклад лямбда-функції, яка обчислює суму двох чисел.

sum = lambda x, y: x + y

Виклик: print(sum(8, 9)).

Результат: 17.