##
3 関数オブジェクト (Function Objects)

Pythonの関数にはいくつかの種類があります。

`PyFunctionObject`
  関数に使われるCの構造体

PyTypeObject `PyFunction_Type`
  `PyTypeObject` 型のインスタンスで、 Python の関数型を表します。 これは Python プログラムに `types.FunctionType` として公開されます。

int `PyFunction_Check`( | PyObject *o)

  o が関数オブジェクト (`PyFunction_Type`を持っている) なら true を返します。 引数は`NULL` であってはいけません。

PyObject* `PyFunction_New`( | PyObject *code, PyObject *globals)

  戻り値: 新たな参照.
  コードオブジェクト code に関連付けられた新しい関数オブジェクトを返します。 globals はこの関数からアクセスできるグローバル変数の辞書でなければなりません。

  関数のドキュメント文字列、名前および __module__ はコードオブジェクトから 取得されます。引数のデフォルト値やクロージャは `NULL` にセットされます。

PyObject* `PyFunction_GetCode`( | PyObject *op)

  戻り値: 借りた参照.
  関数オブジェクト op に関連付けられたコードオブジェクトを返します。

PyObject* `PyFunction_GetGlobals`( | PyObject *op)

  戻り値: 借りた参照.
  関数オブジェクト op に関連付けられたglobals辞書を返します。

PyObject* `PyFunction_GetModule`( | PyObject *op)

  戻り値: 借りた参照.
  関数オブジェクト op の __module__ 属性を返します。　 これは普通はモジュール名の文字列が入っていますが、Python コードから 他のオブジェクトをセットされることもあります。

PyObject* `PyFunction_GetDefaults`( | PyObject *op)

  戻り値: 借りた参照.
  関数オブジェクト op の引数のデフォルト値を返します。 引数のタプルか `NULL` になります。

int `PyFunction_SetDefaults`( | PyObject *op, PyObject *defaults)

  関数オブジェクト op の引数のデフォルト値を設定します。 defaults は Py_None か タプル でなければいけません。

  失敗した時は、`SystemError` を発生し、`-1` を返します。

PyObject* `PyFunction_GetClosure`( | PyObject *op)

  戻り値: 借りた参照.
  関数オブジェクト op に設定されたクロージャを返します。 `NULL` か cell オブジェクトのタプルです。

int `PyFunction_SetClosure`( | PyObject *op, PyObject *closure)

  関数オブジェクト op にクロージャを設定します。 closure は、 Py_None もしくは cell オブジェクトのタプルでなければなりません。

  失敗した時は、`SystemError`を送出し、 `-1` を返します。