# コンテキスト変数オブジェクト

注釈

バージョン 3.7.1 で変更:

Python 3.7.1 で全てのコンテキスト変数の C API のシグネチャは、 `PyContext`, `PyContextVar`, `PyContextToken` の代わりに `PyObject` ポインタを使うように 変更 されました。例えば:

    // in 3.7.0:
    PyContext *PyContext_New(void);

    // in 3.7.1+:
    PyObject *PyContext_New(void);

詳細は bpo-34762 を参照してください。

バージョン 3.7 で追加.

この節では、 `contextvars` モジュールの公開 C API の詳細について説明します。

`PyContext`

  `contextvars.Context` オブジェクトを表現するための C 構造体。

`PyContextVar`

  `contextvars.ContextVar` オブジェクトを表現するための C 構造体。

`PyContextToken`

  `contextvars.Token` オブジェクトを表現するための C 構造体。

PyTypeObject `PyContext_Type`

  コンテキスト 型を表現する型オブジェクト。

PyTypeObject `PyContextVar_Type`

  コンテキスト変数 型を表現する型オブジェクト。

PyTypeObject `PyContextToken_Type`

  コンテキスト変数トークン 型を表現する型オブジェクト。

型チェックマクロ:

int `PyContext_CheckExact`(PyObject *o)

  o が `PyContext_Type` の場合に真を返します。 o は `NULL` であってはなりません。 この関数は常に成功します。

int `PyContextVar_CheckExact`(PyObject *o)

  o が `PyContextVar_Type` の場合に真を返します。 o は `NULL` であってはなりません。 この関数は常に成功します。

int `PyContextToken_CheckExact`(PyObject *o)

  o が `PyContextToken_Type` の場合に真を返します。 o は `NULL` であってはなりません。 この関数は常に成功します。

コンテキストオブジェクトを取り扱う関数:

PyObject *`PyContext_New`(void)
  Return value: New reference.

  新しい空のコンテキストオブジェクトを作成します。 エラーが起きた場合は `NULL` を返します。

PyObject *`PyContext_Copy`(PyObject *ctx)
  Return value: New reference.

  渡された ctx コンテキストオブジェクトの浅いコピーを作成します。 エラーが起きた場合は `NULL` を返します。

PyObject *`PyContext_CopyCurrent`(void)
  Return value: New reference.

  現在のコンテキストオブジェクトの浅いコピーを作成します。 エラーが起きた場合は `NULL` を返します。

int `PyContext_Enter`(PyObject *ctx)

  ctx を現在のスレッドの現在のコンテキストに設定します。 成功したら `0` を、失敗したら `-1` を返します。

int `PyContext_Exit`(PyObject *ctx)

  ctx コンテキストを無効にし、1 つ前のコンテキストを現在のスレッドの現在のコンテキストに復元します。 成功したら `0` を、失敗したら `-1` を返します。

int `PyContext_ClearFreeList`()

  コンテキスト変数のフリーリストをクリアします。 解放された要素数を返します。 この関数は常に成功します。

コンテキスト変数の関数:

PyObject *`PyContextVar_New`(const char *name, PyObject *def)
  Return value: New reference.

  新しい``ContextVar``オブジェクトをさくせいします。name 引数は内部走査とデバッグの目的で使われます。def 引数はコンテキスト変数のデフォルト値を指定するか、デフォルトがない場合は``NULL``です。エラーが起きた場合は、関数は``NULL``を返します。

int `PyContextVar_Get`(PyObject *var, PyObject *default_value, PyObject **value)

  コンテキスト変数の値を取得します。 取得中にエラーが起きた場合は `-1` を、値が見付かっても見付からなくてもエラーが起きなかった場合は `0` を返します。

  コンテキスト変数が見付かった場合、 value はそれを指すポインタになっています。 コンテキスト変数が見付から なかった 場合は、 value が指すものは次のようになっています:

  - (`NULL` でなければ) default_value

  - (`NULL` でなければ) var のデフォルト値

  - `NULL`

  ``NULL``を除けば、この関数は新しい参照を返します。

PyObject *`PyContextVar_Set`(PyObject *var, PyObject *value)
  Return value: New reference.

  現在のコンテキストにおいて var の値を value にセットします。この変更による新しいトークンオブジェクトか、エラーが起こった場合は``NULL``を返します。

int `PyContextVar_Reset`(PyObject *var, PyObject *token)

  var コンテキスト変数の状態をリセットし、 token を返した `PyContextVar_Set()` が呼ばれる前の状態に戻します。 この関数は成功したら `0` 、失敗したら `-1` を返します。