Args y kwargs en Python: su significado

Al leer la documentación de Python, más particularmente cuando se trata de la definición de una función, nos encontraremos con dos palabras un tanto enigmáticas: args y kwargs. En este post explicaremos qué representan y también cómo usarlas en nuestros scripts o programas.

Args y kwargs

Tomemos como ejemplo la definición de la función (también llamada método) format() como vemos en la Fig. 1. En la misma hemos identificado a args y kwargs con resaltado amarillo.

Presencia de args y kwargs en la definición de una función
Figura 1 – Presencia de args y kwargs en la definición de una función

De la descripción de la función podemos ver que args representa un conjunto arbitrario de argumentos posicionales, mientras que kwargs es lo mismo pero con argumentos con keyword, o nombre. De ahí el significado de kwargs: keyword arguments. En realidad, args y kwargs son nombres que se utilizan por convención y no de manera estricta. De ahí que podamos identificar los conjuntos que representan de la siguiente manera:

  1. Argumentos posicionales: *posargs
  2. Argumentos con nombre: **nombreargs

Esta elección arbitraria para identificar los argumentos de la función es posible ya que Python es lo «suficientemente inteligente» como para reconocer que los conjuntos 1 y 2 son identificados por * y **, respectivamente, seguidos por la designación elegida.

Ejemplos

Ahora que señalamos el significado de *args y **kwargs utilizando la definición de format(), ilustraremos con ejemplos en los que definiremos dos funciones de nuestra creación. Para empezar, insertemos el siguiente código en un archivo al que nombraremos args-y-kwargs.py:

def saludo(tipoSaludo, *amigos):
    listaDeAmigos = ''
    for amigo in amigos:
        listaDeAmigos = listaDeAmigos + ' ' + amigo
    print(tipoSaludo + listaDeAmigos)

print('EJEMPLO CON *ARGS:')
saludo('Hola', 'Juan', 'Pedro', 'Rubén')

def verArgsConNombre(**nombreargs):
    for nombre, valor in nombreargs.items():
        print(nombre + ': ' + valor)

print('EJEMPLO CON **KWARGS')
verArgsConNombre(edad='42', profesion='arquitecto', nacionalidad='argentino')

Como podemos ver, la función saludo toma como entrada una variable llamada tipoSaludo y una cantidad arbitraria de argumentos posicionales. Este último conjunto, al que llamamos amigos, es una tupla, por lo que podemos acceder a cada uno de sus elementos mediante un bucle for. Por otro lado, verArgsConNombre espera un conjunto de pares clave / valor como entrada en el que cada elemento es un argumento con nombre. A continuación, este conjunto es convertido en un diccionario que llamamos nombreargs. Esta estructura de datos, por ser iterable, admite que podamos recorrer sus elementos y mostrar el par clave / valor de cada uno. En la Fig. 2 vemos el resultado de ejecutar el archivo args-y-kwargs.py:

Uso de args y kwargs en una función propia
Figura 2 – Uso de args y kwargs en una función propia

En el próximo post usaremos argumentos posicionales y con nombre en conjunto con la función format(). ¡No se lo pierdan!

Un comentario en «Args y kwargs en Python: su significado»

Los comentarios están cerrados.