Saltar al contenido

¿Qué significa el asterisco * en Python?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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