# 컨텍스트 변수 객체

참고

버전 3.7.1에서 변경:

파이썬 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`

  context 형을 나타내는 형 객체.

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 컨텍스트를 비활성화하고 이전 컨텍스트를 현재 스레드의 현재 컨텍스트로 복원합니다. 성공 시 `0`을 반환하고, 에러 시 `-1`을 반환합니다.

int `PyContext_ClearFreeList`()

  컨텍스트 변수 자유 목록을 지웁니다. 해제된 총 항목 수를 반환합니다. 이 함수는 항상 성공합니다.

컨텍스트 변수 함수:

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

  Create a new `ContextVar` object. The name parameter is used for introspection and debug purposes. The def parameter specifies a default value for the context variable, or `NULL` for no default. If an error has occurred, this function returns `NULL`.

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

  컨텍스트 변수의 값을 가져옵니다. 조회하는 동안 에러가 발생하면 `-1`을 반환하고, 값이 있는지와 상관없이 에러가 발생하지 않으면 `0`을 반환합니다.

  컨텍스트 변수가 발견되면, value는 그것을 가리키는 포인터가 됩니다. 컨텍스트 변수가 발견되지 않으면, value는 다음을 가리 킵니다:

  - default_value, `NULL`이 아니면;

  - var의 기본값, `NULL`이 아니면;

  - `NULL`

  Except for `NULL`, the function returns a new reference.

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

  Set the value of var to value in the current context. Returns a new token object for this change, or `NULL` if an error has occurred.

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

  var 컨텍스트 변수의 상태를 token을 반환한 `PyContextVar_Set()` 호출 전의 상태로 재설정합니다. 이 함수는 성공 시 `0`을 반환하고, 에러 시 `-1`을 반환합니다.