関数オブジェクトは関数定義によって生成されます。関数オブジェクトに
対する唯一の操作は、それを呼び出すことです:
func(argument-list)
.
関数オブジェクトには実際には 2 つの種: 組み込み関数とユーザ定義関数 があります。両方とも同じ操作 (関数の呼び出し) をサポートしますが、 実装は異なるので、オブジェクトの型も異なります。
関数の実装では、 2 つの読み出し専用属性を追加しています:
f.func_code
は関数の コードオブジェクト
(以下を参照) であり、 f.func_globals
は関数のグローバル名前空間として使われる辞書です
(f が定義されているモジュールを m としたときの
m.__dict__
と同じです)。
関数オブジェクトはまた、例えば関数のメタ情報を関数に 付属させるといったことに使える、任意の属性の取得や設定をサポート しています。それらの属性の取得や設定には、正規の属性をドット表記する 方法が使われます。現在の実装では、関数の属性をサポートしている のはユーザ定義関数のみなので注意してください。組み込み関数の属性は 将来サポートされるかもしれません。
関数はもう一つの特殊な属性 f.__dict__
(f.func_dict
として知られています) を持っており、
関数属性をサポートするために使われる名前空間を含んでいます。
__dict__
および func_dict
は直接アクセスしたり、
辞書オブジェクトを設定することができます。関数の辞書は削除する
ことができません。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。