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_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_CREATEPyFunction_EVENT_DESTROYPyFunction_EVENT_MODIFY_CODEPyFunction_EVENT_MODIFY_DEFAULTSPyFunction_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.