Pasando múltiples argumentos en métodos y funciones:
Existe una manera en Python de indicar que en el método introduciremos múltiples argumentos a la vez y que estos pueden variar a lo largo del programa, cada vez que se invoque la función.
Para expresar la diferencia entre ambos tipos de argumentos múltiples, vamos a comenzar por “*args”.
Imaginemos que necesitamos sumar una cantidad indefinida de números enteros a lo largo de nuestro programa y cuya cantidad puede variar, vamos a hacer el método de manera similar al siguiente ejemplo:
def metodo1(*args):
return print(sum(args))
metodo1(2,17,36,8,4)
También podemos calcular promedios en una función ingresando un argumento *args y otra variable, para lo cual, deberemos igualar esa variable a su valor u otra variable al momento de invocar la función:
def metodo1(*argumentos, contador):
cont = contador
print (sum(argumentos)/cont)
conteo_de_numeros = 7
metodo1(1,1,1,1,1,1,1,contador=conteo_de_numeros)
Nota: Como podrán ver, no es necesario llamar a los argumentos *args o **kwargs con ese mismo nombre, podemos elegir el que querramos siempre y cuando comience por los operadores de desempaquetado con la cantidad de asteriscos correspondientes para indicar que son ese tipo de argumentos.
Otra de sus cualidades, es la capacidad de poder tomar tuplas o listas como valores dentro de los argumentos *args. Esto nos brinda la posibilidad de trabajar de manera más objetiva y organizada, ya que podemos ir recolectando los diferentes valores a operar a lo largo del programa e introducirlos en la función al terminar de hacer todo el trabajo previo.
def mi_funcion(lista_de_enteros):
resultados = 0
for numero in lista_de_enteros:
resultado += numero
return resultados
mi_lista = [1,2,3]
print(mi_funcion(mi_lista))
Nota: Podemos acumular sumatoria de números utilizando el operador “+=”, esto indica que a una variable le sumaremos otro valor o variable a su propio valor, de esa manera, el valor de esa variable inicial irá aumentando.
Otras dos opciones también muy interesantes, es la capacidad de 1: Ingresar múltiples listas como argumentos y 2: Desempaquetar valores de dichas listas al momento de invocar el método:
def mi_suma(*args):
resultado = 0
for x in args:
resultado += x
return resultado
lista1 = [11, 52, 37]
lista2 = [40, 15]
lista3 = [6, 78, 81, 9]
print(mi_suma(*lista1, *lista2, *lista3))
Concluída la introducción a los *args, nos toca responder la pregunta sobre qué son los **kwargs.
Estos últimos, funcionan de la misma manera que *args, sólo que en lugar de aceptar valores posicionales, aceptan valores determinados por palabras clave. Veamos un ejemplo:
def concatenar(**kwargs):
resultado = ""
for arg in kwargs.values():
resultado += arg
return resultado
print(concatenar(a="Linux", b="Chad", c=" es", d=" genial", e="!"))
Como se puede ver, “kwargs” funciona igual que un diccionario al que le vamos anexando valores. Para acceder a estos mismos valores, lo haremos al igual que un diccionario utilizando “.values”.
Otro detalle a tener en cuenta es que al igual que en *args, podemos elegir el nombre de “kwargs” siempre y cuando que especifiquemos los operadores correspondientes (**).
Ahora queda en sus manos practicar con estos dos argumentos múltiples y probar las diferentes maneras de aplicarlos.