2012-10-08 45 views
13

si una función tiene un número n de argumentos, y no hay otra función que devuelve una secuencia con un número n de elementos (o tengo una secuencia con un número n de artículos), ¿hay una manera de 'mapa' estas dos funciones (o hacer que la primera función de tomar una secuencia de n número de elementos como resultado de entrada y de retorno) no quiero (y tal vez no pueden en algunas ocasiones) para editar la función de mí mismo y cambiar sus parámetros de argumentos y de retorno tipos de valor.desembalaje argumento de la función

es decir)

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

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

no puede func1(func2(...)) en este caso.

Respuesta

14

Usted está buscando la sintaxis *args argumento:

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

Al pasar argumentos a una exigible, cualquier expresión precedida por un asterisco *, se interpreta como una secuencia de argumentos posicionales, y se expandió a ser transmitida como argumentos separadas al objeto llamado (función, método, etc.).

Para su ejemplo que sería:

func1(*func2(...)) 

Hay un equivalente de palabras clave usando ** asteriscos dobles (toma un mapeo), y se puede utilizar la misma sintaxis de firmas de función también.

Consulte el documentation on call expressions, y para la sintaxis del espejo de firma de función, el documentation on function definitions.

Cuestiones relacionadas