Function as an Argument

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

Функція-обгортка (wrapper) — це функція, яка дозволяє обгорнути іншу функцію для розширення поведінки обгорнутої функції без її постійної зміни.

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

Для створення цієї функції використовується ключове слово lambda:

sum = lambda a, b: a + b
double = lambda x: x * 2

Ви можете використовувати lambda-функцію як параметр в іншій функції:

add = lambda x: x + 2
subtract = lambda x: x - 2
double = lambda x: x * 2
divided = lambda x: x / 2

def calculate(operation, number):
    return operation(number)

calculate(add, 10)      # 12
calculate(subtract, 10) # 8
calculate(double, 10)       # 20
calculate(divided, 10)      # 5
from typing import Callable


def new_number(number: int) -> None:

print(f"Received a new number: {number}")



def is_positive(number: int) -> None:

if number > 0:

print(f"{number} is a positive number")

if number == 0:

print("Zero")

if number < 0:

print(f"{number} is a negative number")



def print_bye(number: int) -> None:

print("Bye!")



def numbers_handler(

numbers: list,

before : Callable[[int], None] = new_number,

action : Callable[[int], None] = is_positive,

after : Callable[[int], None] = print_bye,

) -> None:

for number in numbers:

before(number)

action(number)

after(number)