Функція як об'єкт першого класу

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

Це відкриває широкі можливості для створення гнучких і багаторазових функцій.

Області видимості (LEGB)

Область видимості визначає, де у програмі можна звертатися до змінної або функції. У Python існує чотири області видимості, що утворюють модель LEGB:

  1. Local (L): Локальна область видимості всередині функцій.
  2. Enclosed (E): Замкнена область видимості — локальна область у зовнішній функції для вкладеної функції.
  3. Global (G): Глобальна область видимості — для всіх змінних, визначених на рівні модуля.
  4. Built-in (B): Вбудована область видимості — для всіх вбудованих функцій і констант.

Приклад використання:

GLOBAL_VAR = 1

def outer():
    enclosed_var = 2

    def inner():
        local_var = 3
        print(local_var, enclosed_var, GLOBAL_VAR)

    inner()

outer()  # Виведе: 3 2 1

Замикання

Замикання — це функція, що "пам'ятає" значення змінних з області видимості, де вона була створена, навіть після завершення цієї області.

Приклад:

def adder(val):
    def inner(x):
        return x + val
    return inner

two_adder = adder(2)
print(two_adder(3))  # 5

two_adder — це функція, яка запам'ятала значення val, передане в adder, і додає його до свого аргументу.

Каррування