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..
* 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..
** 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.
Args y kwargs son útiles cuando quieres:
Veamos cómo se usan Kwargs y Args en funciones.
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
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 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)
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)
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.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..