ExpertiDict

Python · Avançado · Inglês · Técnico

ParamSpec

/ˈpɛɹæm ˈspɛk/substantivo

Variável de tipo do módulo typing que captura a lista de parâmetros de um chamável. Permite tipar decoradores que preservam a assinatura da função decorada.

Onde usar

Aparece em decorators de retry, cache e logging em bases tipadas. Em code review, sem ParamSpec o mypy perde a assinatura e trata o resultado como um chamável genérico.

Em código

from typing import Callable as C
from typing import ParamSpec, TypeVar
P = ParamSpec('P')
R = TypeVar('R')
def deco(f: C[P, R]) -> C[P, R]:
  def w(*a: P.args, **k: P.kwargs) -> R:
    return f(*a, **k)
  return w

Exemplos

Use ParamSpec so the decorator keeps the signature.

Use ParamSpec para o decorator manter a assinatura.

Without ParamSpec, mypy loses the arguments of the function.

Sem ParamSpec, o mypy perde os argumentos da função.

Cuidado

Não confunda com TypeVar, que captura um tipo; o ParamSpec captura parâmetros inteiros, usando P.args e P.kwargs.

Veja também

Todos os termos de Python