Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

126
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda