Pythonは関数をファーストクラスオブジェクト(つまり普通にオブジェクト)として扱う。 これは紛れも無い事実であり、Pythonにある程度なじんだ人なら『関数オブジェクト』を引数として取る関数を作ったり、『関数オブジェクト』を返す関数を作ったりすることに何の抵抗も無くなる(というか、使えないと一旦思考停止してしまうようにさえすらなる) しかし、だからといって関数が普通のクラスインスタンスのオブジェクトと同じかといえば、実はかなり特殊なオブジェクトであるといわざるを得ない。 いやむしろ、言葉どおり『関数』という特殊な存在を、通常のデータと同様に『オブジェクト』として扱っているだけであるといった方が良いかもしれない。 それではまず、関数と、呼び出しメソッドフックを備えた(つまりobj()の形で使える)オブジェクトとはどこが違うのか、少し見てみることにしよう。 比較する関数は以下の通りだ。 >