Пользовательские функции высшего порядка

Функции, такие как sort, max или min, могут принимать аргументы типа key=, которые являются функциями и могут определять их поведение. Это делает встроенные функции sort и max гораздо более мощными и универсальными. Они могут использоваться во многих различных сценариях, нежели если бы они сравнивали только сами значения без аргумента key=.
Мы можем создавать и свои собственные функции высшего порядка:
def modify(numbers, f):
    res = [f(n) for n in numbers]
    return res

print(modify([1, 2, 3], lambda x: x**2))   # [1, 4, 9]
print(modify([1, 2, 3], lambda x: -x))     # [-1, -2, -3]
print(modify([2, 0, 1], lambda x: 2 * x))  # [4, 0, 2]
print(modify([2, 0, 1], str))              # ['2', '0', '1']
Здесь мы передаем различные функции в качестве f в функцию высшего порядка modify. Функция modify создает новый список на основе входного и возвращает результат. Обратите внимание, что мы можем даже передать такую функцию, как str. Таким образом, к каждому элементу входного списка будет применена функция str()str(2), str(0), str(1).

Задание

Реализуйте универсальную версию функции sum, названную generic_sum, которая будет принимать коллекцию в качестве первого аргумента (это может быть список, множество или список кортежей) и функцию в качестве второго аргумента, которая извлекает число из каждого элемента коллекции.
def generic_sum():
    ...

print(generic_sum([1, 2, 3], lambda x: x))                   # 6
print(generic_sum({1, 2, 3}, lambda x: x))                   # 6
print(generic_sum([(1, 3), (4, 6)], lambda x: x[0] + x[1]))  # 14
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue