Python * args y ** kwargs (con ejemplos)

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:

  1. * args (argumentos sin palabras clave)
  2. ** 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.

Articulos interesantes...