###
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` は直接アクセスしたり、 辞書オブジェクトを設定することができます。関数の辞書は削除する ことができません。