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.

Tabla de contenidos

🤔 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 😉».

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *