7.5.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 の引数のデフォルト値を設定します。 defaultsPy_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 を返します。

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