プロが教えるわが家の防犯対策術!

pythonの「関数の関数」の実例として、「関数を引数で受け取り、微分した結果の関数を返す関数」と書いてあるのですが、意味がわかりません…
どういう事なのか教えていただけないでしょうか?

A 回答 (3件)

関数の関数では意味が曖昧模糊としてますが


高階関数というのが有ります。

例えばこんなの

import datetime

def hello():
 print("こんちは")

def decorator(func):
 def wrapper():
  print(datetime.datetime.now())
  func()
 return wrapper

decorated_hello=decorator(hello)

hello()

print()

decorated_hello()

これを実行すると


--------------------
こんちは

2022-06-06 19:49:30.100925
こんちは
--------------------

decoratorは関数を引数として受け取り、
それに日付を出力する処理を加えた新しい関数を
作って返してます。

こういうのを高階関数といいます。

maxのように直ちに実行するタイプの高階関数もあります。

L=[-3, 2 ,1]

print(max(L, key=abs))
は -3を出力します。
max関数はリストの要素のひとつひとつにabs関数を呼び出し、
結果が最大のものを返します。これも高階関数です。

関数を引数に取らずに関数を返す関数も高階関数です。
    • good
    • 0

「関数を引数で受け取る」関数や、「関数を返り値として返す」関数を高階関数、と言います。



高階関数:
https://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E …

高階関数を簡単に扱えるのが、Pythonの特徴の1つです。

### 例
import math

# 例: 三角関数の微分
def trig_diff(fun):
 table = {math.sin: math.cos,
     math.cos: lambda x: - math.sin(x),
     math.tan: lambda x: 1 / (cos(x) ** 2)}
 return table[fun]

### 実行例

>>> math.cos == trig_diff(math.sin)
True
>>> - math.sin(0) == trig_diff(math.cos)(0)
True
>>> - math.sin(math.pi) == trig_diff(math.cos)(math.pi)
True
>>> - math.sin(math.pi/2) == trig_diff(math.cos)(math.pi/2)
True
>>>
    • good
    • 0

>関数を引数で受け取り、微分した結果の関数を返す関数


・数値計算する関数foo(x)
・関数を返す関数hi(f)
―があるとして「bar=hi(foo)」としたら、bar(2)でx=2の時のfoo(x)の微分値を計算してくれます。

他に解釈することも可能なので、どこに書いてあったか出典を補足すれば回答を得られやすいと思います。
「pythonの「関数の関数」の実例として」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!