¿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().

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

