Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

133
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!