*args y **kwargs en Python

En este artículo, cubriremos qué hacen ** (doble estrella/asterisco) y * (estrella/asterisco) para los parámetros en Python . Aquí, también cubriremos ejemplos de args y kwargs en Python. Podemos pasar un número variable de argumentos a una función usando símbolos especiales. 

Hay dos símbolos especiales:

 

Símbolos especiales utilizados para pasar argumentos: –

  • *args (argumentos que no son palabras clave)
  • **kwargs (argumentos de palabras clave)

Nota: “Usamos la notación “comodín” o “*” como esta – *args O **kwargs – como argumento de nuestra función cuando tenemos dudas sobre la cantidad de argumentos que debemos pasar en una función. 

¿Qué es Python * argumentos?

La sintaxis especial *args en las definiciones de funciones en python se usa para pasar un número variable de argumentos a una función. Se utiliza para pasar una lista de argumentos de longitud variable sin palabras clave. 

  • La sintaxis es usar el símbolo * para tomar un número variable de argumentos; por convención, a menudo se usa con la palabra args.
  • Lo que *args le permite hacer es tomar más argumentos que la cantidad de argumentos formales que definió previamente. Con *args , se puede agregar cualquier cantidad de argumentos adicionales a sus parámetros formales actuales (incluidos cero argumentos adicionales).
  • Por ejemplo, queremos hacer una función de multiplicación que tome cualquier cantidad de argumentos y pueda multiplicarlos todos juntos. Se puede hacer usando *args.
  • Usando el *, la variable que asociamos con el * se vuelve iterable, lo que significa que puede hacer cosas como iterar sobre ella, ejecutar algunas funciones de orden superior como mapear y filtrar, etc.

Ejemplo 1:

Programa Python para ilustrar *args para un número variable de argumentos

python3

def myFun(*argv):
    for arg in argv:
        print(arg)
 
 
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Producción:

Hello
Welcome
to
GeeksforGeeks

Ejemplo 2:

Programa Python para ilustrar *args con un primer argumento extra

Python3

def myFun(arg1, *argv):
    print("First argument :", arg1)
    for arg in argv:
        print("Next argument through *argv :", arg)
 
 
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Producción:

First argument : Hello
Next argument through *argv : Welcome
Next argument through *argv : to
Next argument through *argv : GeeksforGeeks

¿Qué es Python **kwargs?

La sintaxis especial **kwargs en las definiciones de funciones en python se usa para pasar una lista de argumentos de longitud variable con palabras clave. Usamos el nombre kwargs con la estrella doble. La razón es que la estrella doble nos permite pasar argumentos de palabras clave (y cualquier número de ellos).

  • Un argumento de palabra clave es donde proporciona un nombre a la variable a medida que la pasa a la función.
  • Uno puede pensar en los kwargs como un diccionario que asigna cada palabra clave al valor que pasamos junto a ella. Es por eso que cuando iteramos sobre los kwargs , no parece haber ningún orden en el que se imprimieron.

Ejemplo 1: 

Programa de Python para ilustrar *kwargs para un número variable de argumentos de palabras clave. Aquí **kwargs acepta el argumento de longitud variable con palabra clave pasado por la llamada a la función. for first=’Geeks’ first es clave y ‘Geeks’ es un valor. en palabras sencillas, lo que asignamos es valor, y a quién asignamos es clave. 

Python3

def myFun(**kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))
 
 
# Driver code
myFun(first='Geeks', mid='for', last='Geeks')

Producción:

first == Geeks
mid == for
last == Geeks
 

Python-Foundation-Course

Ejemplo 2:

Programa de Python para ilustrar **kwargs para un número variable de argumentos de palabras clave con un argumento adicional. De todos modos, pero un cambio es que pasamos un argumento que no es una palabra clave que es aceptable por un argumento posicional (arg1 en myFun). y los argumentos de palabras clave que pasamos son aceptables para **kwargs. sencillo verdad?

Python3

def myFun(arg1, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))
 
 
# Driver code
myFun("Hi", first='Geeks', mid='for', last='Geeks')

Producción:

first == Geeks
mid == for
last == Geeks

Uso de *args y **kwargs para llamar a una función

Ejemplo 1:

Aquí, estamos pasando *args y **kwargs como argumento en la función myFun. Pasar *args a myFun simplemente significa que pasamos los argumentos posicionales y de longitud variable que están contenidos en args. entonces, “geeks” pasan a arge1, “for” pasan a arg2, y “geeks” pasan a arg3. cuando pasamos **kwargs como argumento a myFun, significa que acepta argumentos de palabras clave. Aquí, “arg1 es clave y el valor es “Geeks” que se pasa a arge1, y así “for” y “Geeks” pasan a arg2 y arg3 respectivamente. Después de pasar todos los datos, estamos imprimiendo todos los datos en líneas. 

python3

def myFun(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)
 
 
# Now we can use *args or **kwargs to
# pass arguments to this function :
args = ("Geeks", "for", "Geeks")
myFun(*args)
 
kwargs = {"arg1": "Geeks", "arg2": "for", "arg3": "Geeks"}
myFun(**kwargs)

Producción:

arg1: Geeks
arg2: for
arg3: Geeks
arg1: Geeks
arg2: for
arg3: Geeks

Ejemplo 2:

Aquí, estamos pasando *args y **kwargs como argumento en la función myFun. donde ‘geeks’, ‘for’, ‘geeks’ se pasa como *args, y first=”Geeks”, mid=”for”, last=”Geeks”  se pasa como **kwargs y se imprime en la misma línea.

python3

def myFun(*args, **kwargs):
    print("args: ", args)
    print("kwargs: ", kwargs)
 
 
# Now we can use both *args ,**kwargs
# to pass arguments to this function :
myFun('geeks', 'for', 'geeks', first="Geeks", mid="for", last="Geeks")

Producción:

args: ('geeks', 'for', 'geeks')
kwargs {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *