argumento de la función de descomprimir [duplicado]

Resuelto thkang asked hace 12 años • 2 respuestas

Si una función toma n número de argumentos y hay otra función que devuelve una secuencia con n número de elementos (o tengo una secuencia con n número de elementos), ¿hay alguna manera de 'asignar' estas dos funciones (o hacer la primera función toma una secuencia de n elementos como entrada y devuelve el resultado) No quiero (y tal vez no pueda en algunas ocasiones) editar la función yo mismo y cambiar sus parámetros de argumentos y tipos de valores de retorno.

es decir)

def func1(x, y, z):
    return x+y+z

def func2(w):
    return [i for i in range(w,w+3)]

No puedo func1(func2( ... ))en este caso.

thkang avatar Oct 08 '12 23:10 thkang
Aceptado

Estás buscando la *argssintaxis del argumento:

>>> def foo(bar, baz, spam):
...     print bar, baz, spam
...
>>> arguments = [1, 2, 3]
>>> foo(*arguments)
1, 2, 3

Al pasar argumentos a un invocable, cualquier expresión precedida por un *asterisco se interpreta como una secuencia de argumentos posicionales y se expande para pasarse como argumentos separados al objeto llamado (función, método, etc.).

Para tu ejemplo eso sería:

func1(*func2(...))

Existe una palabra clave equivalente que usa **asteriscos dobles (requiere un mapeo) y también puede usar la misma sintaxis en las firmas de funciones.

Consulte la documentación sobre expresiones de llamada y, para conocer la sintaxis reflejada de la firma de función, la documentación sobre definiciones de funciones .

Martijn Pieters avatar Oct 08 '2012 17:10 Martijn Pieters

Se llama desempaquetado de argumentos y se escribe como:

func1(*func2(...))

Consulte: https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

Jon Clements avatar Oct 08 '2012 17:10 Jon Clements