Sé libre de compartir nuestro sitio y códigos en tus redes, necesitamos tu ayuda para hacer crecer nuestra comunidad.
Solución:
Consulte Definiciones de funciones en la Referencia del lenguaje.
si la forma
*identifier
está presente, se inicializa a una tupla que recibe cualquier parámetro posicional en exceso, por defecto a la tupla vacía. si la forma**identifier
está presente, se inicializa en un nuevo diccionario que recibe cualquier argumento de palabra clave en exceso, de forma predeterminada en un nuevo diccionario vacío.
Además, consulte Llamadas de función.
Suponiendo que uno sabe qué son los argumentos posicionales y de palabras clave, aquí hay algunos ejemplos:
Ejemplo 1:
# Excess keyword argument (python 2) example:
def foo(a, b, c, **args):
print "a = %s" % (a,)
print "b = %s" % (b,)
print "c = %s" % (c,)
print args
foo(a="testa", d="excess", c="testc", b="testb", k="another_excess")
Como puede ver en el ejemplo anterior, solo tenemos parámetros a, b, c
en la firma del foo
función. Ya que d
y k
no están presentes, se colocan en el diccionario args. La salida del programa es:
a = testa
b = testb
c = testc
'k': 'another_excess', 'd': 'excess'
Ejemplo 2:
# Excess positional argument (python 2) example:
def foo(a, b, c, *args):
print "a = %s" % (a,)
print "b = %s" % (b,)
print "c = %s" % (c,)
print args
foo("testa", "testb", "testc", "excess", "another_excess")
Aquí, dado que estamos probando argumentos posicionales, los que sobran tienen que estar al final, y *args
los empaqueta en una tupla, por lo que la salida de este programa es:
a = testa
b = testb
c = testc
('excess', 'another_excess')
También puede descomprimir un diccionario o una tupla en argumentos de una función:
def foo(a,b,c,**args):
print "a=%s" % (a,)
print "b=%s" % (b,)
print "c=%s" % (c,)
print "args=%s" % (args,)
argdict = dict(a="testa", b="testb", c="testc", excessarg="string")
foo(**argdict)
Huellas dactilares:
a=testa
b=testb
c=testc
args='excessarg': 'string'
Y
def foo(a,b,c,*args):
print "a=%s" % (a,)
print "b=%s" % (b,)
print "c=%s" % (c,)
print "args=%s" % (args,)
argtuple = ("testa","testb","testc","excess")
foo(*argtuple)
Huellas dactilares:
a=testa
b=testb
c=testc
args=('excess',)
Solo tengo una cosa que agregar que no quedó clara en las otras respuestas (en aras de la exhaustividad).
También puede usar las estrellas al llamar a la función. Por ejemplo, supongamos que tiene un código como este:
>>> def foo(*args):
... print(args)
...
>>> l = [1,2,3,4,5]
Puedes pasar la lista l a foo así…
>>> foo(*l)
(1, 2, 3, 4, 5)
Puedes hacer lo mismo con los diccionarios…
>>> def foo(**argd):
... print(argd)
...
>>> d = 'a' : 'b', 'c' : 'd'
>>> foo(**d)
'a': 'b', 'c': 'd'
Todas las respuestas anteriores fueron perfectamente claras y completas, pero solo para que conste, me gustaría confirmar que el significado de * y ** en python no tiene absolutamente ninguna similitud con el significado de los operadores de apariencia similar en C.
Se denominan operadores de desempaquetado de argumentos y de desempaquetado de argumentos de palabras clave.