Estos enfoques se pueden combinar siempre que respetemos las reglas mencionadas:
- Los argumentos con valor por defecto siempre deberán incluirse a la derecha de los argumentos sin valor por defecto
- Los argumentos posiciones arbitrarios deben incluirse a la derecha de los argumentos posicionales
- Los argumentos clave siempre deberán incluirse a la derecha de los argumentos posicionales
- Los argumentos clave arbitrarios deberán incluir a la derecha de los argumentos clave
Por ejemplo, la siguiente función suma todos los argumentos que recibe, con independencia de su tipo:
def suma(a, *args, b = 0, c = 0, **kwargs):
# Argumentos posicionales
total = a
# Argumentos posicionales arbitrarios
for value in args:
total += value
# Argumentos posicionales con valor por defecto
total += b
# Argumentos clave
total += c
# Argumentos clave arbitrarios
for value in kwargs.values():
total+= value
return total
suma(2, 1, 3, 2, c = 1, d = 3, e = 4)
16
En este código Python interpreta correctamente las asignaciones:
- El argumento 2 es posicional
- Los argumentos 1 y 3 son posicionales arbitrarios
- El argumento 2 es un argumento posicional con valor por defecto
- El argumento c = 1 es un argumento clave
- Los argumentos d = 3 y e = 4 son argumentos clave arbitrarios