argumento de la función de descomprimir [duplicado]
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.
Estás buscando la *args
sintaxis 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 .
Se llama desempaquetado de argumentos y se escribe como:
func1(*func2(...))
Consulte: https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists