Pythonではオブジェクトという言葉がよく使われています。
(オブジェクト指向とは少し違う意味で、どちらかといえばインスタンスという言葉に近いです。)
まず公式ドキュメントにはこう書かれております。
Python における オブジェクト (object) とは、データを抽象的に表したものです。
Python公式ドキュメント:https://docs.python.org/ja/3/reference/datamodel.html#objects-values-and-types
プログラムが計算に使用したり、処理したりするデータのことをオブジェクトと呼びます。例えば、整数や文字列、リスト、タプルなどのデータについてです。
さて本題に入っていきますが、
実は関数も変数に代入して扱うことができます。
Pythonでは、関数とは使用する際にはdef~から始まる形式で定義し、行いたい処理をまとめておくことが出来るものでした。
そんな関数についてですが、関数も『オブジェクト』として扱うことが出来ます。
今回はそんな関数オブジェクトについてお話させていただきたいと思います。
関数の引数に関数を使用する
下にサンプルを記述します。
このコードはまず、test_funcの引数に関数を渡してと定義してます。
そして、textを返す関数sub_funcを定義します。
そして最後にtest_funcにsub_funcを渡して、sub_funcで定義したtextを出力するといった内容になっています。
なんだか面倒だと感じてしまう。。。
どうでしょうか??
なにやら回りくどい感じで、必要性を感じないかもしれません。
正直に申しますと、上記のような例であれば、2つ関数を使用しなくても通常の関数を実行する形で書いてしまえばいいいじゃないかと思います。
もう少し実践的に使ってみる
もうちょっと実践的に使っていきますね・
下記のコードは
リストの中から、偶数の数字を取り出すコードになります。
今回は偶数の場合を書きましたが、別の関数(例えば10以上の数をリストに追加)のように
別の関数を条件として定義することが可能になります。
つまり、リストに追加する関数とリストに追加する関数を別々に記述することができます。
上の例は例え話なのですが
こうして書くことで、複雑なコードを種類別にわかりやすく書くことができるようになります。
おわりに
どうもこんにちは!!コンです。
ここまで読んでいただき、ありがとうございます。
今日も今日とてPythonの勉強をしていて
関数もなかなか奥がふかいな〜と感じております。
私は関数を引数に関数を書くというレベル高いことはしないのですが、
どうしても仕事で使うAIのプログラムが同じようなことをしているため、
今回改めて勉強しました。
難しいですがしっかり勉強したいと思います。