2.3.9.3 関数

関数オブジェクトは関数定義によって生成されます。関数オブジェクトに 対する唯一の操作は、それを呼び出すことです: func(argument-list).

関数オブジェクトには実際には 2 つの種: 組み込み関数とユーザ定義関数 があります。両方とも同じ操作 (関数の呼び出し) をサポートしますが、 実装は異なるので、オブジェクトの型も異なります。

関数の実装では、 2 つの読み出し専用属性を追加しています: f.func_code は関数の コードオブジェクト (以下を参照) であり、 f.func_globals は関数のグローバル名前空間として使われる辞書です (f が定義されているモジュールを m としたときの m.__dict__ と同じです)。

関数オブジェクトはまた、例えば関数のメタ情報を関数に 付属させるといったことに使える、任意の属性の取得や設定をサポート しています。それらの属性の取得や設定には、正規の属性をドット表記する 方法が使われます。現在の実装では、関数の属性をサポートしている のはユーザ定義関数のみなので注意してください。組み込み関数の属性は 将来サポートされるかもしれません。

関数はもう一つの特殊な属性 f.__dict__ (f.func_dict として知られています) を持っており、 関数属性をサポートするために使われる名前空間を含んでいます。 __dict__ および func_dict は直接アクセスしたり、 辞書オブジェクトを設定することができます。関数の辞書は削除する ことができません。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。