左から右への関数合成を実装する

PythonPythonBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

関数合成は、関数型プログラミングで使用される技術であり、2つ以上の関数を結合して新しい関数を作成します。Pythonでは、functoolsモジュールのcompose関数を使用して関数合成を行うことができます。ただし、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

逆合成関数

1つ以上の関数を引数として受け取り、左から右への関数合成を行う新しい関数を返すcompose_right関数を作成します。最初の(最も左の)関数は1つ以上の引数を受け取ることができます。残りの関数は単項関数でなければなりません。

あなたの実装は、左から右への関数合成を行うためにfunctoolsモジュールのreduce関数を使用する必要があります。

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関数を実装しました。左から右への関数合成を行うために、functoolsモジュールのreduce関数を使用しました。