- Parámetros posicionales
- Argumentos nombrados
- Valores por defecto en parámetros
- Argumentos solo nombrados
Existen varios métodos para pasar datos a las funciones, y uno de los más básicos es el uso de parámetros posicionales.
Parámetros posicionales
Los parámetros posicionales funcionan según el orden en el que aparecen en la definición de la función. Cuando llamamos a una función y le pasamos valores, estos se asignan a los parámetros en el mismo orden en el que fueron definidos.
def add(x, y):
return x + y
Diferencia entre parámetros y argumentos:
- Parámetros: los nombres en la definición de la función (
xyyen este caso). - Argumentos: los valores reales que se pasan al llamar la función.
⏬ Ejemplo de llamada con argumentos:
add(10, 20) # x = 10, y = 20
Argumentos nombrados
En Python, además de los parámetros posicionales, existen los argumentos nombrados (keyword arguments). Son útiles cuando la función tiene muchos parámetros del mismo tipo.
def calculate(base, sub, mul):
return (base - sub) * mul
Llamada a la función con parámetros posicionales:
calculate(10, 3, 2) # 14
👀 Problema: No es evidente qué valor representa cada parámetro.
Para mayor claridad, usamos argumentos nombrados:
calculate(base=10, sub=3, mul=2) # 14
Incluso podemos cambiar el orden de los argumentos:
calculate(mul=2, sub=3, base=10) # 14
Python asocia los valores por nombre, no por posición, lo que hace que el código sea más legible.
Cuándo usar argumentos nombrados
No hay reglas estrictas, pero se recomienda:
✅ Usarlos cuando la función tiene más de tres parámetros.
✅ Usarlos si los parámetros tienen el mismo tipo de datos para evitar confusión.
make('circle', 300, 150, 10, None, 2.5, False)
⏬ Ejemplo más legible con argumentos nombrados:
make(
shape='circle',
x=300, y=150, radius=10,
line_pattern=None,
line_width=2.5,
fill=False
)
Este código es mucho más fácil de entender.
Valores por defecto en parámetros
A veces, ciertos parámetros de una función siempre tienen los mismos valores. Por ejemplo:
open()abre archivos en modo lectura por defecto.print()añade un salto de línea automáticamente.
Podemos establecer valores por defecto en los parámetros:
def calculate(base, sub, mul=1):
return (base - sub) * mul
⏬ Ejemplo:
calculate(10, 3, 2) # Usa el valor dado: 14
calculate(10, 3) # Usa el valor por defecto (mul=1): 7
⚠️ Orden de argumentos: Los argumentos posicionales deben ir antes de los argumentos nombrados, de lo contrario, Python lanzará un error:
calculate(base=10, 3)
# ❌ SyntaxError: positional argument follows keyword argument
Argumentos solo nombrados
En Python, podemos exigir que ciertos parámetros solo puedan pasarse por nombre (keyword-only).
Esto se logra usando * en la firma de la función.
def open_file(name, *, writable=False, binary=False):
...
⏬ Ejemplos de llamadas válidas:
f1 = open_file('foo.txt', writable=True)
f2 = open_file('bar.bin', binary=True)
⏬ Ejemplo con error:
f3 = open_file('raw.dat', True, True)
# TypeError: open_file() takes 1 positional argument but 3 were given
Aquí * separa los parámetros posicionales de los estrictamente nombrados (writable y binary).
Esto evita errores y hace que el código sea más claro.
También podemos definir funciones con solo argumentos nombrados:
def configure(*, debug=False, logging=True):
...
En este caso, configure() solo puede llamarse con argumentos nombrados:
configure(debug=True, logging=False) # Correcto
configure(True, False) # Error
Resumen
- Parámetros posicionales: Se asignan según el orden en la llamada a la función.
- Argumentos nombrados: Se asignan por nombre, mejorando la claridad del código.
- Valores por defecto: Permiten omitir parámetros opcionales.
- Keyword-only arguments: Se pasan obligatoriamente por nombre, evitando ambigüedades.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.