Սեփական higher-order ֆունկցիաներ

Ֆունկցիաները, ինչպիսիք են sort-ը, max-ը կամ min-ը, կարող են ընդունել այնպիսի արգումենտներ, ինչպիսիք են key=-ն, որոնք ֆունկցիաներ են և կարող են փոփոխել դրանց վարքը: Սրա շնորհիվ ներկառուցված ֆունկցիաները՝ sort-ը և max-ը, դառնում են ավելի հզոր և ընդհանուր: Դրանք կարող են ավելի լայն կիրառություն ունենալ, քան եթե համեմատեին միայն արժեքները՝ առանց key= արգումենտի:
Մենք կարող ենք նաև ստեղծել մեր սեփական higher-order ֆունկցիաները:
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, որը որպես առաջին արգումենտ կընդունի հավաքածու (դա կարող է լինել զանգված, set կամ tuple-ների զանգված) և ֆունկցիա՝ որպես երկրորդ արգումենտ, որը ստանալով մի էլեմենտ` վերադարձնում է դրան համապատասխան թիվ (տե՛ս օրինակը)։
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