En este artículo, aprenderemos sobre Python * args y ** kwargs, sus usos y funciones con ejemplos.
En programación, definimos una función para hacer un código reutilizable que realiza una operación similar. Para realizar esa operación, llamamos a una función con el valor específico, este valor se llama argumento de función en Python.
Le recomendamos que lea la función Python y los argumentos de la función Python.
Supongamos que definimos una función para la suma de 3 números.
Ejemplo 1: función para sumar 3 números
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Cuando ejecutamos el programa anterior, la salida será
suma: 35
En el programa anterior tenemos una adder()
función con tres argumentos x, y y z. Cuando pasamos tres valores mientras adder()
llamamos a la función, obtenemos la suma de los 3 números como salida.
Veamos qué sucede cuando pasamos más de 3 argumentos en la adder()
función.
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Cuando ejecutamos el programa anterior, la salida será
TypeError: adder () toma 3 argumentos posicionales pero se dieron 5
En el programa anterior, pasamos 5 argumentos a la adder()
función en lugar de 3 argumentos debido a los cuales obtuvimos TypeError
.
Introducción a * args y ** kwargs en Python
En Python, podemos pasar un número variable de argumentos a una función usando símbolos especiales. Hay dos símbolos especiales:
- * args (argumentos sin palabras clave)
- ** kwargs (argumentos de palabras clave)
Usamos * args y ** kwargs como argumento cuando no estamos seguros del número de argumentos que se deben pasar en las funciones.
Python * args
Como en el ejemplo anterior, no estamos seguros de la cantidad de argumentos que se pueden pasar a una función. Python tiene * args que nos permiten pasar el número variable de argumentos sin palabras clave a la función.
En la función, debemos usar un asterisco *
antes del nombre del parámetro para pasar argumentos de longitud variable. Los argumentos se pasan como una tupla y estos argumentos pasados forman una tupla dentro de la función con el mismo nombre que el parámetro excluyendo el asterisco *
.
Ejemplo 2: uso de * args para pasar los argumentos de longitud variable a la función
def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)
Cuando ejecutamos el programa anterior, la salida será
Suma: 8 Suma: 22 Suma: 17
En el programa anterior, usamos * num como un parámetro que nos permite pasar una lista de argumentos de longitud variable a la adder()
función. Dentro de la función, tenemos un ciclo que agrega el argumento pasado e imprime el resultado. Pasamos 3 tuplas diferentes con longitud variable como argumento para la función.
Python ** kwargs
Python pasa argumentos de longitud variable sin palabras clave a la función usando * args pero no podemos usar esto para pasar argumentos de palabras clave. Para este problema, Python tiene una solución llamada ** kwargs, que nos permite pasar la longitud variable de los argumentos de palabras clave a la función.
En la función, usamos el asterisco doble **
antes del nombre del parámetro para denotar este tipo de argumento. Los argumentos se pasan como un diccionario y estos argumentos forman un diccionario dentro de la función con el mismo nombre que el parámetro excluyendo el doble asterisco **
.
Ejemplo 3: uso de ** kwargs para pasar los argumentos de la palabra clave variable a la función
def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)
Cuando ejecutamos el programa anterior, la salida será
Tipo de datos del argumento: El nombre es Sita El apellido es Sharma La edad es 22 El teléfono es 1234567890 Tipo de datos del argumento: El nombre es John El apellido es Wood El correo electrónico es [email protected] País es Wakanda La edad es 25 El teléfono es 9876543210
En el programa anterior, tenemos una función intro()
con ** datos como parámetro. Pasamos dos diccionarios con longitud de argumento variable a la intro()
función. Tenemos la intro()
función for loop inside que funciona con los datos del diccionario pasado e imprime el valor del diccionario.
Cosas para recordar:
- * args y * kwargs son palabras clave especiales que permiten que la función tome un argumento de longitud variable.
- * args pasa el número variable de la lista de argumentos sin palabras clave y sobre qué operación de la lista se puede realizar.
- ** kwargs pasa un número variable de argumentos de palabras clave al diccionario a la función en la que se puede realizar la operación de un diccionario.
- * args y ** kwargs hacen que la función sea flexible.