Функция как тип, параметр и результат другой функции

Последнее обновление: 16.01.2022

Функция как тип

В Python функция фактически представляет отдельный тип. Так мы можем присвоить переменной какую-нибудь функцию и затем, используя переменную, вызывать данную функцию. Например:

def say_hello(): print("Hello")
def say_goodbye(): print("Good Bye")

message = say_hello
message()       # Hello
message = say_goodbye
message()       # Good Bye

В данном случае переменной message присваивается одна из функций. Сначала ей передается функция say_hello():

message = say_hello

После этого переменная message будет указывать на данную функцию, то есть фактически представлять функцию say_hello. А это значит, что мы можем вызывать переменную message как обычную функцию:

message()       # Hello

Фактически это приведет к выполнению функции say_hello, и на консоль будет выведена строка "Hello". Затем подобным образом мы можем передать переменной message другую функцию и вызвать ее.

Подобным образом можно через переменную вызывать функцию с параметрами и возвращать ее результат:

def sum(a, b): return a + b
def multiply(a, b): return a * b

operation = sum
result = operation(5, 6)
print(result)   # 11

operation = multiply
print(operation(5, 6))      # 30

Функция как параметр функции

Поскольку функция в Python может представлять такое же значение как строка или число, соответственно мы можем передать ее в качестве параметра в другую функцию. Например, определим функцию, которая выводит на консоль результат некоторой операции:

def do_operation(a, b, operation):
    result = operation(a, b)
    print(f"result = {result}")

def sum(a, b): return a + b
def multiply(a, b): return a * b

do_operation(5, 4, sum)         # result = 9
do_operation(5, 4, multiply)   # result = 20

В данном случае функция do_operation имеет три параметра, причем третий параметр, как предполагается, будет представлять функцию, которая принимает два параметра и возвращает некоторый результат. Иными словами третий параметр - operation представляет некоторую операцию, но на момент определения функции do_operation мы точно не знаем, что это будет за операция. Мы только знаем, что она принимает два параметр и возвращает какой-то результат, который потом выводится на консоль.

При вызове функции do_operation мы сможем передать в качестве третьего параметра другую функцию, например, функцию sum:

do_operation(5, 4, sum) 

То есть в данном случае параметр operation фактически будет представлять функцию sum и будет возвращать сумму дву чисел.

Затем аналогичным образов в вызов функции do_operation можно передать третьему параметру другую функцию - multiply, которая выполнит умножение чисел:

do_operation(5, 4, multiply)   # result = 20

Таким образом, более гибкие по функциональности функции, которые через параметры принимают другие функции.

Функция как результат функции

Также одна функция в Python может возвращать другую функцию. Например, определим функцию, которая в зависимости от значения параметра возвращает ту или иную операцию:

def sum(a, b): return a + b
def subtract(a, b): return a - b
def multiply(a, b): return a * b


def select_operation(choice):
    if choice == 1:
        return sum
    elif choice == 2:
        return subtract
    else:
        return multiply


operation = select_operation(1)     # operation = sum
print(operation(10, 6))             # 16

operation = select_operation(2)     # operation = subtract
print(operation(10, 6))             # 4

operation = select_operation(3)     # operation = multiply
print(operation(10, 6))             # 60

В данном случае функция select_operation в зависимости от значения параметра choice возвращает одну из трех функций - sum, subtract и multiply. Затем мы мы можем получить результат функции select_operation в переменную operation:

operation = select_operation(1)

Так, в данном случае в функцию select_operation передается число 1, соответственно она будет возвращать функцию sum. Поэтому переменная operation фактически будет указывать на функцию sum, которая выполняет сложение двух чисел:

print(operation(10, 6))             # 16 - фактически равно sum(10, 6)

Аналогичным образом можно получить и выполнить другие функции.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850