# Objetos Slice

PyTypeObject PySlice_Type
  Parte da ABI Estável.

  Tipo de objeto para objetos fatia. Isso é o mesmo que `slice` na camada Python.

int PySlice_Check( PyObject *ob)

  Retorna true se ob for um objeto fatia; ob não deve ser `NULL`. Esta função sempre tem sucesso.

PyObject *PySlice_New( PyObject *start, PyObject *stop, PyObject *step)
  Retorna valor: Nova referência. Parte da ABI Estável.

  Return a new slice object with the given values. The start, stop, and step parameters are used as the values of the slice object attributes of the same names. Any of the values may be `NULL`, in which case the `None` will be used for the corresponding attribute.

  Return `NULL` with an exception set if the new object could not be allocated.

int PySlice_GetIndices( PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
  Parte da ABI Estável.

  Recupera os índices de início, parada e intermediário do objeto fatia slice, presumindo uma sequência de comprimento length. Trata índices maiores que length como erros.

  Retorna `0` em caso de sucesso e `-1` em caso de erro sem exceção definida (a menos que um dos índices não fosse `None` e falhou ao ser convertido para um inteiro, neste caso `-1` é retornado com uma exceção definida).

  Você provavelmente não deseja usar esta função.

  Alterado na versão 3.2: O tipo de parâmetro para o parâmetro slice era antes de `PySliceObject*`.

int PySlice_GetIndicesEx( PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
  Parte da ABI Estável.

  Substituição utilizável para `PySlice_GetIndices()`. Recupera os índices de início, parada e intermediário do objeto fatia slice presumindo uma sequência de comprimento length e armazena o comprimento da fatia em slicelength. Índices fora dos limites são cortados de maneira consistente com o tratamento de fatias normais.

  Return `0` on success and `-1` on error with an exception set.

  Nota

  Esta função não é considerada segura para sequências redimensionáveis. Sua invocação deve ser substituída por uma combinação de `PySlice_Unpack()` e `PySlice_AdjustIndices()` sendo

      if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
          // return error
      }

  substituído por

      if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
          // return error
      }
      slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

  Alterado na versão 3.2: O tipo de parâmetro para o parâmetro slice era antes de `PySliceObject*`.

  Alterado na versão 3.6.1: Se `Py_LIMITED_API` não estiver definido ou estiver definido com um valor entre `0x03050400` e `0x03060000` (não incluso) ou `0x03060100` ou mais alto, `PySlice_GetIndicesEx()` é implementado como uma macro usando `PySlice_Unpack()` e `PySlice_AdjustIndices()`. Os argumentos start, stop e step são avaliados mais de uma vez.

  Obsoleto desde a versão 3.6.1: Se `Py_LIMITED_API` estiver definido para um valor menor que `0x03050400` ou entre `0x03060000` e `0x03060100` (não incluso), `PySlice_GetIndicesEx()` é uma função descontinuada.

int PySlice_Unpack( PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
  Parte da ABI Estável desde a versão 3.7.

  Extrai os membros de dados de início, parada e intermediário de um objeto fatia como C inteiros. Reduz silenciosamente os valores maiores do que `PY_SSIZE_T_MAX` para `PY_SSIZE_T_MAX`, aumenta silenciosamente os valores de início e parada menores que `PY_SSIZE_T_MIN` para `PY_SSIZE_T_MIN`, e silenciosamente aumenta os valores de intermediário menores que `-PY_SSIZE_T_MAX` para `-PY_SSIZE_T_MAX`.

  Return `-1` with an exception set on error, `0` on success.

  Adicionado na versão 3.6.1.

Py_ssize_t PySlice_AdjustIndices( Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
  Parte da ABI Estável desde a versão 3.7.

  Ajusta os índices de fatias inicial/final presumindo uma sequência do comprimento especificado. Índices fora dos limites são cortados de maneira consistente com o tratamento de fatias normais.

  Retorna o comprimento da fatia. Sempre bem-sucedido. Não chama o código Python.

  Adicionado na versão 3.6.1.

## Objeto Ellipsis

PyObject *Py_Ellipsis

  O objeto Python `Ellipsis`. Este objeto não tem métodos. Como `Py_None`, é um objeto singleton imortal.

  Alterado na versão 3.12: `Py_Ellipsis` é imortal.