2010-06-28 25 views
42

voglio passare tutti gli argomenti passati ad una funzione (func1) come argomenti ad un'altra funzione (func2) all'interno func1 Questo può essere fatto con *args, *kwargs nella chiamata func1 e passandoli fino a func2, ma c'è un altro modo?Passando tutti gli argomenti di una funzione ad un'altra funzione

Originariamente

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

ma se la mia firma func1 è

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

come faccio tutti loro mando a func2, senza l'utilizzo di

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

Esiste un modo come in javascript callee.arguments?

+0

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

+0

Non vedo come possa essere utile ... – jcao219

+0

non è tutto ciò che è utile, ma a volte scrivo una funzione con molti argomenti, e mi annoio di copiarli e al di sopra di. – roopesh

risposta

33

Esplicito è meglio che implicita ma se proprio non si vuole digitare alcuni caratteri:

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

locals() sono tutte le variabili locali, quindi non è possibile impostare qualsiasi Vars in più prima di chiamare func2 o saranno passati anche loro.

+5

Questo avrà il difetto che se hai creato variabili locali prima di chiamare 'func2', allora saranno anche passati a' func2'. –

+2

forse potresti copiare i locali proprio all'inizio della funzione? – Bwmat

+0

ya, la copia va bene credo. – roopesh

9

A condizione che gli argomenti a func1 sono solo argomenti a parola chiave, si potrebbe fare questo:

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