PR

pythonの関数(def)の中に関数を引数として渡してみる

def-in-def-eyecatch

今回もpythonについての記事です。

pythonで関数を定義することもあると思いますが、

その関数の定義でちょっとアドバンス的な使い方を習得したので、

ここでご紹介します。

関数の引数に関数を持たせることによるメリットなんかも

ご紹介していこうと思います。

この記事を読むことでわかること

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

↓↓↓↓これまでのPythonの記事についてはこちら↓↓↓↓

まずはpythonの関数を用意する。

さて、まずはpythonで関数を用意するところからスタートです。

はっきりいってどんな関数でもいいですが、

基本的に関数と言ったら、引数を用いることがほとんどだと思いますから、

今回は、このような計算式を関数化してみることにします。

x2+5

2次関数ですね。

これを関数化すると、このようになりますね?

def f0(x):
    return x**2+5

関数名はf0としています。

また、2乗するところですが、

pythonでは**2となりますので注意して下さい。

^2とかやると怒られます。

pythonの関数で、引数に関数を持つものを作る。

次に、本題ですが、

引数に関数を持つ関数を用意しましょう。

今回は、微分する関数を用意しました。

いわゆる中心差分を使った数値微分ですね。

def fBibun(f,x):
    h=1e-4
    return ((f(y+h)-f(y-h))/(2*h))

関数の名前はfBibunとしました。

微分なのでBibunですね。ちょっと安易です。

この関数の引数の【f】

に注目してください。

よく見ると、ただの数値が入っていないことに注意です。

通常よく使う引数というものは、

ただの変数として使いますよね?

fBibun関数でいうところの、【x】がそれにあたります。

fは最初から関数として引数にいれる前提ですので、

このfBibun関数のように、f(x+h)や

f(x-h)なんて記述が可能なんです。

実際に引数に関数を持つ関数を使ってみる。

それでは、実際にやってみましょう。

テストしたいだけなので、printするだけにします。

また、具体的な数値を入れないと計算できませんから、

xにはテキトーに5という数字をいれてみます。

def f0(x):
    return x**2+5

def fBibun(f,y):
    h=1e-4

    return ((f(y+h)-f(y-h))/(2*h))


print(fBibun(f0,5))

こんな感じですね。

さて、計算結果は、

9.999999999976694

こんな感じになりました。

ちょっと手計算して値のチェックをしてみましょう。

x2+5をxで微分すると、

2xですね。

今回、yとして入れている値は5

その5がxにも入りますから、

答えとしては2*x=2*5

ということで、10となります。

計算結果としてはほぼ10となっていますので、

正しく計算できているということがわかりますね。

引数に関数を持つ関数を使用するメリット

さて、関数の微分を例にして話を進めてきましたが、

理解できましたでしょうか??

ここまで理解できれば、なんとなくメリットもわかってくるかと思います。

それが、

【いろんな関数で試したいときにラクできる】

これですね。

今回の例では、

x2+5をxで微分する。という例でしたが、

違う関数を微分したいとき、いちいちmain上、もしくは

微分している関数(具体的にはfBibun関数)を

直接いじるのはあまり効率的とは言えないですよね?

ただ、関数を引数として使えることがわかっていないと、

そのようにするしかありません。

なので、メリットの理解に加えて、

積極的にこの仕組みを使っていったほうがいいことがわかります。

今回のまとめ

私自身、引数に使えるもの(つかってきたもの)といえば、

せいぜい、intやstring、その配列、あとはクラスくらい

なものでした。

実際のところ、書籍で微分する関数を目にするまで、

やろうとも思ったことがなかったですが、

機械学習なんかやる人には当たり前に使う技術のようです。

ぜひあなたもこの技術を使ってみてください!!!

コメント

タイトルとURLをコピーしました