Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

125
Visualizações
¿Puedo omitir Opcional si configuro el valor predeterminado en Ninguno?

Por ejemplo:

 def foo(bar: int = None): pass

Cuando verifico un tipo/anotación de bar pycharm me dice que es Optional[int] .

bar: int = None se ve mucho más limpio que bar: Optional[int] = None , especialmente cuando tiene más de 10 parámetros.

Entonces, ¿puedo simplemente omitir Optional ? ¿Las herramientas como mypy u otros linters resaltarán este caso como un error?

Parece que a Python en sí no le gusta la idea:

 In [1]: from typing import Optional In [2]: from inspect import signature In [3]: def foo(a: int = None): pass In [4]: def bar(a: Optional[int] = None): pass In [5]: signature(foo).parameters['a'].annotation Out[5]: int In [6]: signature(bar).parameters['a'].annotation Out[6]: typing.Union[int, NoneType]
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No. Anteriormente se permitía Omitir Optional , pero desde entonces se eliminó.

Una versión anterior de este PEP permitía a los verificadores de tipos asumir un tipo opcional cuando el valor predeterminado es Ninguno [...]

Este ya no es el comportamiento recomendado. Los verificadores de tipo deberían pasar a exigir que el tipo opcional se haga explícito.

Algunas herramientas aún pueden proporcionar el comportamiento anterior para el soporte heredado. Incluso si ese es el caso, no confíe en que sea compatible en el futuro.


En específico, mypy todavía admite Optional implícito de forma predeterminada, pero señala explícitamente que esto puede cambiar en el futuro:

Tipos opcionales y el tipo Ninguno (mypy v0.782)

[...] Puede usar la opción de línea de comando --no-implicit-optional para dejar de tratar los argumentos con un valor predeterminado Ninguno como si tuvieran un tipo implícito Opcional[...]. Es posible que esto se convierta en el comportamiento predeterminado en el futuro.

La obsolescencia de este comportamiento se rastrea en mypy/#9091

over 4 years ago · Santiago Trujillo Relatório

0

Una versión anterior de la norma, tal como se define en PEP 484 , permitía esto.

Sin embargo, la versión más actualizada establece lo siguiente en la sección Unión :

Una versión anterior de este PEP permitía que los verificadores de tipos asumieran un tipo opcional cuando el valor predeterminado era Ninguno, como en este código:

 def handle_employee(e: Employee = None): ...

Esto se habría tratado como equivalente a:

 def handle_employee(e: Optional[Employee] = None) -> None: ...

Este ya no es el comportamiento recomendado. Los verificadores de tipo deberían pasar a exigir que el tipo opcional se haga explícito.

Me alegro de esto. A mis ojos, en realidad parece discordante.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda