Function オブジェクト
*********************

Functionオブジェクト固有の関数はわずかです。

type PyFunctionObject

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

PyTypeObject PyFunction_Type

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

int PyFunction_Check(PyObject *o)

   *o* が関数オブジェクト ("PyFunction_Type" 型である) 場合に真を返し
   ます。パラメータは "NULL" にできません。この関数は常に成功します。

PyObject *PyFunction_New(PyObject *code, PyObject *globals)
    *戻り値: 新しい参照。*

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

   関数のドキュメント文字列と名前はコードオブジェクトから取得されます
   。 "__module__" は *globals* から取得されます。 引数のデフォルト値
   やアノテーション、クロージャは "NULL" に設定されます。
   "__qualname__" はコードオブジェクトの "co_qualname" フィールドと同
   じ値に設定されます。

PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
    *戻り値: 新しい参照。*

   "PyFunction_New()" に似ていますが、関数オブジェクトの
   "__qualname__" 属性に値をセットできます。 *qualname* はユニコードオ
   ブジェクトか "NULL" でなくてはなりません。"NULL" だった場合、
   "__qualname__" 属性にはコードオブジェクトの "co_qualname" フィール
   ドと同じ値がセットされます。

   Added in version 3.3.

PyObject *PyFunction_GetCode(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト *op* に関連付けられたコードオブジェクトを返します
   。

PyObject *PyFunction_GetGlobals(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト *op* に関連付けられたglobals辞書を返します。

PyObject *PyFunction_GetModule(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト "op" の "__module__" 属性への *借用参照* を返しま
   す。 "NULL" の場合もあります。

   通常はモジュール名を含む "文字列" ですが、Python コードで任意の別の
   オブジェクトに設定できます。

PyObject *PyFunction_GetDefaults(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト *op* の引数のデフォルト値を返します。 引数のタプル
   か "NULL" になります。

int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)

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

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

void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)

   指定された関数オブジェクト "func" の vectorcall フィールドを設定し
   ます。

   警告: この API を使う拡張は、変更前の (デフォルトの) vectorcall 関
   数の動作を維持しなければなりません。

   Added in version 3.12.

PyObject *PyFunction_GetKwDefaults(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト "op" のキーワード専用引数のデフォルト値を返します
   。 引数の辞書、または "NULL" です。

int PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)

   関数オブジェクト "op" のキーワード専用引数のデフォルト値を設定しま
   す。 "defaults" はキーワード専用引数の辞書、または "Py_None" でなけ
   ればなりません。

   成功した場合は "0" を返し、失敗した場合は例外を設定して "-1" を返し
   ます。

PyObject *PyFunction_GetClosure(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト *op* に設定されたクロージャを返します。 "NULL" か
   cell オブジェクトのタプルです。

int PyFunction_SetClosure(PyObject *op, PyObject *closure)

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

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

PyObject *PyFunction_GetAnnotations(PyObject *op)
    *戻り値: 借用参照。*

   関数オブジェクト *op* のアノテーションを返します。 返り値は修正可能
   な辞書か "NULL" になります。

int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)

   関数オブジェクト *op* のアノテーションを設定します。 *annotations*
   は辞書か、"Py_None" でなければなりません。

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

PyObject *PyFunction_GET_CODE(PyObject *op)
PyObject *PyFunction_GET_GLOBALS(PyObject *op)
PyObject *PyFunction_GET_MODULE(PyObject *op)
PyObject *PyFunction_GET_DEFAULTS(PyObject *op)
PyObject *PyFunction_GET_KW_DEFAULTS(PyObject *op)
PyObject *PyFunction_GET_CLOSURE(PyObject *op)
PyObject *PyFunction_GET_ANNOTATIONS(PyObject *op)
    *戻り値: 借用参照。*

   これらの関数は、対応する "PyFunction_Get*" 関数と同様ですが、型のチ
   ェックを行いません。 "PyFunction_Type" のインスタンス以外を渡すと、
   動作は未定義です。

int PyFunction_AddWatcher(PyFunction_WatchCallback callback)

   現在のインタープリタの関数ウォッチャーとして "callback" を登録しま
   す。 "PyFunction_ClearWatcher()" に渡せる ID を返します。 エラーの
   場合 (例えば利用可能なウォッチャー ID がない場合) は、例外を設定し
   て "-1" を返します。

   Added in version 3.12.

int PyFunction_ClearWatcher(int watcher_id)

   現在のインタープリタについて、"PyFunction_AddWatcher()" が以前返し
   た "watcher_id" で識別されるウォッチャーを解除します。 成功した場合
   は "0" を返します。 エラーの場合 (例えば指定した "watcher_id" が登
   録されていない場合) は、例外を設定して "-1" を返します。

   Added in version 3.12.

type PyFunction_WatchEvent

      関数ウォッチャーで発生し得るイベントの列挙型。

      * "PyFunction_EVENT_CREATE"

      * "PyFunction_EVENT_DESTROY"

      * "PyFunction_EVENT_MODIFY_CODE"

      * "PyFunction_EVENT_MODIFY_DEFAULTS"

      * "PyFunction_EVENT_MODIFY_KWDEFAULTS"

   Added in version 3.12:

   * "PyFunction_EVENT_MODIFY_QUALNAME"

   Added in version 3.15.

PY_FOREACH_FUNC_EVENT(V)

   "PyFunction_WatchEvent" 定数の各接尾辞にマクロ "V" を適用します。
   現在は "V(CREATE) V(DESTROY) V(MODIFY_CODE) V(MODIFY_DEFAULTS)
   V(MODIFY_KWDEFAULTS) V(MODIFY_QUALNAME)" に展開されます。 マクロ
   "V" は一つのイベント名を受け取り、展開結果の間に必要な区切り記号を
   補う必要があります。

typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)

   関数ウォッチャーのコールバック関数の型。

   "event" が "PyFunction_EVENT_CREATE" または
   "PyFunction_EVENT_DESTROY" の場合、"new_value" は "NULL" です。 そ
   れ以外の場合、"new_value" は "func" の変更対象の属性に格納しようと
   している新しい値への *借用参照* です。

   コールバックは "func" を調べても構いませんが、変更してはいけません
   。 変更すると、無限再帰など予測できない結果を招く可能性があります。

   "event" が "PyFunction_EVENT_CREATE" の場合、コールバックは "func"
   の初期化がすべて完了した後で呼び出されます。 それ以外の場合は
   "func" を変更する前に呼び出されるので、変更前の状態を調べられます。
   ランタイムは、可能であれば最適化によって関数オブジェクトの作成を省
   略しても構いません。 その場合、イベントは発生しません。 このため、
   最適化の判断によって観測できる実行時の動作に違いが生じる可能性はあ
   りますが、実行される Python コードの意味は変わりません。

   "event" が "PyFunction_EVENT_DESTROY" の場合、コールバック内で破棄
   されようとしている関数への参照を取得すると、その関数が復活し、この
   時点での解放を防ぎます。 復活したオブジェクトが後で破棄されるときは
   、その時点で有効なウォッチャーのコールバックが再び呼び出されます。

   コールバックが例外を設定した場合は "-1" を返す必要があります。 その
   例外は、"PyErr_WriteUnraisable()" を使って送出できない例外として表
   示されます。 それ以外の場合は "0" を返してください。

   コールバックに入る時点で、すでに処理待ちの例外が設定されている場合
   があります。 その場合、コールバックは同じ例外を設定したまま "0" を
   返すべきです。 そのため、例外を設定し得る別の API を呼び出す場合は
   、まず例外の状態を保存してクリアし、戻る前に復元する必要があります
   。

   Added in version 3.12.
