Entendiendo Args y Kwargs en Python

En este tutorial, me centraré en los argumentos (* args) y argumentos de palabras clave (* kwargs) en Python.

Le enseñaré qué son los argumentos y los kwargs y, lo que es más importante, cómo usarlos, es decir, cómo asimilar un número ilimitado de argumentos y argumentos de palabras clave en las funciones..

Que son los args?

* args se utilizan para pasar sin palabra clave argumentos Ejemplos de no palabras clavelos argumentos son diversión (3,4), diversión ("foo", "bar").

* args por lo general se utilizan como una medida para evitar que el programa se bloquee si no sabemos cuántos argumentos se pasarán a la función. Esto se usa en C ++ así como en otros lenguajes de programación..

Que son los kwargs?

** kwargs es un diccionario de argumentos de palabras clave. los ** nos permite pasar cualquier número de argumentos de palabras clave. Un argumento de palabra clave es básicamente un diccionario..

Un ejemplo de una palabra claveargumento es diversión (foo = 2, bar = 7).

** kwargs son como * args Excepto que usted declara las variables y la cantidad dentro de la función. argumentos.

Donde usar Args y Kwargs

Args y kwargs son útiles cuando quieres:

  • Reducir la reescritura de código.
  • Haga su código legible.
  • Reutilizar tu codigo

Usando Args y Kwargs en funciones

Veamos cómo se usan Kwargs y Args en funciones.

Args

La siguiente función toma en tres argumentos. Los tres argumentos se han definido explícitamente, por lo que más o menos causará un error en el programa.

def add (a, b, c): imprimir (a + b + c) imprimir agregar (2,3,4) 

Vamos a ejecutar la función. La función sumará los tres números, dando la siguiente salida:

Salida 9

¿Qué pasaría si pasáramos cuatro argumentos en la función en lugar de los tres requeridos? Recibiremos un error como se muestra abajo..

Esto se debe a que solo se definieron tres parámetros en la función, pero hemos pasado cuatro argumentos posicionales al llamar a la función.

def add (a, b, c): imprimir (a + b + c) imprimir agregar (2,3,4,5) 
Salida TypeError: add () toma 3 argumentos posicionales pero se dieron 4 

En el segundo ejemplo a continuación, el * es para sin palabra clave Argumentos y se pasa a la función. En lugar de tener argumentos definidos, reemplazamos una, segundo y do con un solo parámetro (* args).

Observe cómo el uso de * args facilita el uso de cualquier número de argumentos sin tener que cambiar su código. * args proporcione más flexibilidad a su código ya que puede tener tantos argumentos como desee en el futuro.

def add (* args): total = 0 para arg en args: total + = arg impresión total 
Escenario 1 imprimir añadir (1,2,5) Salida 8 
Escenario 2 imprimir añadir (1,2,5,6) salida 14 
Escenario 3 imprimir añadir (1,2,5,8) Salida 16

Más ejemplos

Crea una función simple como se muestra:

def func (* args): # * args significa que, independientemente de los argumentos que tome, los capturará todos para arg en args: print arg 

Probar la función utilizando una combinación de enteros y cadenas:

def func (* args): # * args significa que, independientemente de los argumentos que tome, los capturará todos para arg en args: print arg print func (11,3,4,5, "tuts") 
Salida 11 3 4 5 tuts

¿Qué pasaría si tuviéramos que pasar una lista como argumento? Pruebe la función con una lista reemplazando los argumentos anteriores con una lista,  l = [11,3,4,5, "tuts].

def func (* args): # * args significa que, independientemente de los argumentos que tome, los capturará todos para arg en args: print arg l = [11,3,4,5, "tuts"] print func (l ) 
Esto imprime la lista como un todo, Esto se debe a que interpreta la lista como un elemento. Salida [11,3,4,5, "tuts]

Del ejemplo anterior, también puede utilizar * args para desempaquetar los argumentos que ya están en una lista o una tupla para que todos los elementos de la lista se pasen como parámetros diferentes.

Usando la misma función:

def func (* args): # * args significa que, independientemente de los argumentos que tome, los capturará todos para arg en args: print (arg) l = [11,3,4,5, "tuts"] print ( func (* l)) 
El * desempaquetará la lista y dará salida a cada elemento de la lista individual. Salida 11 3 4 5 tuts

Kwargs

Kwargs te permite pasar argumentos de palabras clave a una función. Se utilizan cuando no está seguro del número de argumentos de palabra clave que se pasarán en la función.

Escribe una funcion my_func y pasar en (x = 10, y = 20) como palabra clave argumentos como se muestra a continuación:

def my_func (x = 10, y = 20): imprime x, y
Esto imprime los valores de x y y Salida 10,20

Los Kwargs pueden usarse para desempacar claves de diccionario, pares de valores. Esto se hace usando la notación de doble asterisco (**). Es importante tener en cuenta que cada clave debe coincidir con un valor.

Aquí hay un ejemplo típico de cómo se hace. La siguiente función toma a los países como claves y sus ciudades capitales como valores. Luego imprime una declaración que recorre los kwargs y asigna cada palabra clave al valor que se le asigna..

def capital_cities (** kwargs): # inicializa una lista vacía para almacenar el resultado resultante = [] para clave, valor en kwargs.items (): result.append ("La ciudad capital de  es  .format (clave , valor) resultado de retorno

Puede llamar a la función con cualquier argumento que desee..

def capital_cities (** kwargs): # inicializa una lista vacía para almacenar el resultado resultante = [] para clave, valor en kwargs.items (): result.append ("La ciudad capital de  es  .format (clave , valor) retorno resultado imprimir capital_city (China = "Beijing", El Cairo = "Egipto", Roma = "Italia"))
salida ['La ciudad capital de China es Beijing', 'La ciudad capital de El Cairo es Egipto', 'La ciudad capital de Roma es Italia'] 

Para un ejemplo más complejo, supongamos que tenemos un modelo para un cliente que se parece a esto:

clase Cliente (models.Model): first_name = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) username = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) contraseña = models.CharField (max_length = 100)

Puede usar kwargs para realizar tanto entradas de datos como consultas de datos desde objetos del modelo. Vamos a escribir una vista de función para crear un nuevo cliente..

kwargs = "first_name": "John", "last_name": "Doe", "username ':" johndoe "," email "[email protected]", "password": "1234" new_user = User (* * kwargs) new_user.save ()

Aquí es cómo realizar una consulta del cliente que acabamos de crear utilizando kwargs.

filter_customer = 'email': [email protected], 'username': johndoe, Customer.objects.filter (** filter_customer)

Usando Args y Kwargs en una función

Cuando se usan args y kwargs en la misma definición de función, * args debe ocurrir antes ** kwargs

clase MyFunction (Foo): def __init __ (self, * args, ** kwargs): imprime 'my function' super (MyFunction, self) .__ init __ (* args, ** kwargs)

Ejemplo:

def Func (* args, ** kwargs): para arg en args: imprime arg para el elemento en kwargs.items (): imprime el elemento

Recuerda args debería venir antes Kwargs.

def Func (* args, ** kwargs): para arg en args: print arg para artículo en kwargs.items (): print item print Func (1, x = 7, u = 8)
Salida 1 ('x', 7) ('u', 8)

Conclusión

Espero que este tutorial te haya ayudado a entender args y kwargs..

A continuación hay algunos consejos para recordar al usar args y kwargs:

  • * args y ** kwargs son sintaxis especial que se utilizan en las funciones para pasar un número variable de argumentos a una función.
  • * args ocurrir antes ** kwargs en una definición de función.
  • * args y ** kwargs se utilizan mejor en situaciones en las que el número de entradas seguirá siendo relativamente pequeño.
  • Puedes usar el nombre que quieras; args y Kwargs Son solo por convención y no un requisito. Por ejemplo, puedes usar * foo en lugar de * args o ** foo en lugar de ** kwargs.

La documentación oficial de Python ofrece mucha información para un estudio adicional. Además, no dude en ver lo que tenemos disponible para la venta y para estudiar en el mercado, y no dude en hacer cualquier pregunta y proporcionar sus valiosos comentarios utilizando la siguiente información..