2010-06-28 17 views
42

quiero pasar todos los argumentos que se pasan a una función (func1) como argumentos a otra función (func2) en el interior func1 Esto se puede hacer con *args, *kwargs en el llamado func1 y pasarlos hasta func2, pero ¿hay otra manera?Pasando todos los argumentos de una función a otra función

Originalmente

def func1(*args, **kwargs): 
    func2(*args, **kwargs) 

pero si mi firma func1 es

def func1(a=1, b=2, c=3): 

cómo los todos envían a func2, sin necesidad de utilizar

def func1(a=1, b=2, c=3): 
    func2(a, b, c) 

¿Hay alguna manera como en javascript callee.arguments?

+0

posiblemente relacionados: http://stackoverflow.com/questions/1136673/when-should-i-use-varargs -in-designing-a-python-api –

+0

No veo cómo esto podría ser útil ... – jcao219

+0

no es tan útil, pero a veces escribo una función con muchos argumentos y me aburro de copiarlos y encima. – roopesh

Respuesta

33

Explícito es mejor que implícito pero si realmente no quiere escribir algunos caracteres:

def func1(a=1, b=2, c=3): 
    func2(**locals()) 

locals() son todas las variables locales, por lo que no se puede establecer ningún VARs adicionales antes de llamar func2 o pasarán también.

+5

Esto tendrá la falla de que si ha creado variables locales antes de llamar a 'func2', entonces también se pasarán a' func2'. –

+2

¿tal vez podría copiar locales justo al comienzo de la función? – Bwmat

+0

ya, la copia está bien, supongo. – roopesh

9

A condición de que los argumentos a func1 son únicos argumentos de palabras clave, usted puede hacer esto:

def func1(a=1, b=2, c=3): 
    func2(**locals()) 
Cuestiones relacionadas