質問するログイン新規登録

Q&A

解決済

2回答

856閲覧

高階関数/コールバック関数のエラーについて

okahijiki

総合スコア404

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/03/18 00:05

0

0

高階関数/コールバック関数を書いてみたのですが、エラーになってしまいます。対処方法をお教えください。

python

1def diff(f,x): 2 h= 1e-4 3 return (f(x+h)-f(x))/h 4 5def func(x): 6 return 2*x**2+0.5*x 7 8diff(func(x),1) 9 10# NameError: name 'x' is not defined

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答2

0

すでに回答が出ていますが、補足の説明として。

関数名に()を付ける(場合によっては()の中に実引数を指定する)と、その関数が実行されて結果(返り値)が得られます。

今回のコードだと、変数xに値を設定してからfunc(x)として関数funcを呼び出せば、2*x**2+0.5*xを計算した結果(数値)が得られますね。xに値を設定していないのでエラーが発生しています。

ならば、あらかじめ変数xに値を設定しておけばいいのかというと、そうではありません。

関数diffの実引数に渡したいのは、関数funcの実行結果ではなく、関数funcそのもの(関数オブジェクト)だからです。

関数diffの仮引数fが、実引数の関数オブジェクト(今回のコードだと関数func)を受け取り、それを関数diffの内部でf(x+h)f(x)のように、(実引数を指定して)関数として実行します。

というわけで、関数diffを実行する際の第1引数は、func(x)ではなく、funcでないといけません。

投稿2021/03/18 00:25

Daregada

総合スコア11992

okahijiki

2021/03/18 03:36

ご回答、ありがとうございます。自分なりの言葉で、こう解釈してみました。 diff(func(x),1)の場合、関数func(x)が呼び出されることになるが、関数内のxの値が設定されてていない。 deff(func,1)の場合、オブジェクトfuncとして呼び出され、diff(f,x)内に反映される。
guest

0

ベストアンサー

python

1diff(func,1)

投稿2021/03/18 00:06

ozwk

総合スコア13553

okahijiki

2021/03/18 00:13

ありがとうございます。できましたー。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問