Pythonの関数はオブジェクトなのか?属性を持たせる方法を解説
Pythonの関数はオブジェクトである
結論から言うと、Pythonの関数は完全なオブジェクトです。def文やlambda式を使うと、Pythonは自動的に関数オブジェクトを生成します。
通常のオブジェクトと同様に、関数にも属性(アトリビュート)を持たせたり、後から参照したりすることができます。さらに、関数の中にはデータ変数だけでなく、別の関数を定義することも可能です。
サンプルコード
以下の例では、def文で作成した関数に「score」という属性を代入し、その値を取得しています。また、lambda式で生成したオブジェクトの型も確認しています。
def foo(): pass foo.score = 20 print(type(foo)) print(foo.score) print(type(lambda x:x))
実行結果
このコードを実行すると、次のような出力が得られます。
C:/Users/TutorialsPoint1/~.py <type 'function'> 20 <type 'function'>
解説
- <type 'function'>:def文で定義したfooも、lambda式で生成した無名関数も、どちらも「function」型のオブジェクトであることがわかります。
- 20:関数オブジェクトに代入したscore属性の値が正しく取得できています。
このように、Pythonでは関数は第一級オブジェクト(first-class object)として扱われます。つまり、変数への代入、引数としての受け渡し、戻り値としての返却など、他のオブジェクトと同じように操作できます。これはデコレータやコールバック関数といった高度なテクニックの基礎となる重要な概念です。
-
JavaScriptの部分関数(Partial Function)とは?仕組みと実装例をわかりやすく解説
部分関数(Partial Function)とは、既存の関数を引数として受け取り、それに加えて別の型の引数も同時に受け取れるようにする仕組みです。まず渡された引数の一部を使い、残りの引数を受け取る新しい関数を返します。そして、返された関数が呼び出されるときに、あらかじめ固定しておいた引数とそのときに渡された引数をすべて組み合わせて、元の親関数が実行されます。 この手法は「部分適用(Partial Application)」とも呼ばれ、関数型プログラミングの基本的なテクニックのひとつです。共通する引数を先に束縛しておくことで、処理の再利用性やコードの可読性を高めることができます。 コード例 以下
-
Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説
本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値