Реализация композиции функций слева направо

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Композиция функций - это техника, используемая в функциональном программировании для объединения двух или более функций с созданием новой функции. В Python мы можем использовать функцию compose из модуля functools для выполнения композиции функций. Однако функция compose выполняет композицию функций справа налево, что может не подходить для всех случаев использования. В этом испытании вы реализуете функцию, которая выполняет композицию функций слева направо.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python/BasicConceptsGroup -.-> python/comments("Comments") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/keyword_arguments("Keyword Arguments") python/FunctionsGroup -.-> python/lambda_functions("Lambda Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") subgraph Lab Skills python/comments -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/tuples -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/function_definition -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/keyword_arguments -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/lambda_functions -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/importing_modules -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/using_packages -.-> lab-13606{{"Реализация композиции функций слева направо"}} python/standard_libraries -.-> lab-13606{{"Реализация композиции функций слева направо"}} end

Композиция функций в обратном порядке

Напишите функцию compose_right, которая принимает одну или более функций в качестве аргументов и возвращает новую функцию, которая выполняет композицию функций слева направо. Первая (самая левая) функция может принимать один или более аргументов; оставшиеся функции должны быть унарными.

Ваше реализация должна использовать функцию reduce из модуля functools для выполнения композиции функций слева направо.

from functools import reduce

def compose_right(*fns):
  ## ваш код здесь
from functools import reduce

def compose_right(*fns):
  return reduce(lambda f, g: lambda *args: g(f(*args)), fns)
add = lambda x, y: x + y
square = lambda x: x * x
add_and_square = compose_right(add, square)
add_and_square(1, 2) ## 9

Резюме

В этом испытании вы реализовали функцию compose_right, которая выполняет композицию функций слева направо. Вы использовали функцию reduce из модуля functools для выполнения композиции функций слева направо.