Problema con Python: Por qué «opcional» no hace que los argumentos sean opcionales

Problema con Python: Por qué «opcional» no hace que los argumentos sean opcionales

0thUUgNF6fEKoJruB

¿Alguna vez has escrito una función de Python con «Opcional» y te has preguntado por qué el argumento sigue sin ser opcional? 🤯

Esta publicación aclara la confusión entre las sugerencias de tipo y los valores predeterminados con ejemplos sencillos.

🤔 La confusión

Cuando la gente ve esto por primera vez en Python:

from typing import Optional

def greet(name: Optional[str]) -> None:
print("Hello", name)

Lo primero que pienso es:
«¡Genial! Ahora puedo llamar a greet() sin pasar un parámetro».
Pero… no. Intenta llamar a greet().

Python

Espera, ¿qué? ¿No acabamos de decir «opcional»? ¿No debería ser opcional el argumento?

🔍 La verdad sobre Optional

Aquí está el truco:

  • Optional[str] es simplemente una sugerencia de tipo.
  • Indica a Python (y a tu IDE/verificador de tipos como mypy) que el parámetro puede ser str o None.
  • No convierte el parámetro en opcional por arte de magia en llamadas a funciones.

Así que funciona:

def greet(name: Optional[str]) -> None:
print("Hello", name)

greet("Alice")
greet(None)

#output
# Hello Alice
# Hello None

¿Pero saltarse el argumento por completo? ❌ No está permitido.

✅ Cómo hacerlo realmente opcional

Si quieres que el argumento se pueda omitir, debes asignarle un valor predeterminado:

def greet(name: Optional[str] = None) -> None:
if name is None:
print("Hello, stranger!")
else:
print("Hello", name)

greet()
greet("Alice")
greet(None)

# output
# ✅ Hello, stranger!
# ✅ Hello Alice
# ✅ Hello, stranger!

⚡ Regla general rápida

  • Optional[X] → significa X o None (solo sugerencia de tipo).
  • = None → permite omitirlo en tiempo de ejecución.
  • Usa ambos juntos si desea un parámetro verdaderamente opcional.

📝 Conclusión final

Que el nombre no te engañe: Optional no se trata de omitir argumentos.
Se trata de aceptar None.

Si quieres que el parámetro de tu función sea opcional en la práctica, recuerda asignar también un valor predeterminado.

La próxima vez que alguien pregunte: «¿Por qué Optional no es opcional?», puedes decir con seguridad: «Porque a Python le gusta trollearnos un poco 😉».

Post Your Comment

Subscribe Our Newsletter

Protegiendo y transformando negocios a través de ciberseguridad avanzada y automatización inteligente con IA en Baja California y todo México.
Enzenada-Cloud
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.