2010-06-28 7 views
42

Je veux passer tous les arguments passés à une fonction (func1) comme arguments à une autre fonction (func2) à l'intérieur func1 Cela peut être fait avec *args, *kwargs dans l'appelé func1 et de les transmettre jusqu'à func2, mais y a-t-il un autre moyen?Passant tous les arguments d'une fonction à une autre fonction

origine

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

mais si ma signature de func1 est

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

comment puis-je les envoyer tous à func2, sans utiliser

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

Est-il possible que dans javascript callee.arguments?

+0

possiblement liés: http://stackoverflow.com/questions/1136673/when-should-i-use-varargs -in-design-a-python-api –

+0

Je ne vois pas comment cela pourrait être utile ... – jcao219

+0

ce n'est pas très utile, mais parfois j'écris une fonction avec beaucoup d'arguments, et je m'ennuie de les copier et plus de. – roopesh

Répondre

33

explicite est mieux que implicite mais si vous ne voulez vraiment pas taper quelques caractères:

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

locals() sont toutes les variables locales, de sorte que vous ne pouvez pas définir des vars supplémentaires avant d'appeler func2 ou ils vont passer aussi.

+5

Cela aura la faille que si vous avez créé des variables locales avant d'appeler 'func2', elles seront également passées à' func2'. –

+2

peut-être pourriez-vous copier les locaux dès le début de la fonction? – Bwmat

+0

ya, copier c'est bien je suppose. – roopesh

9

A condition que les arguments ne sont que des arguments func1 mots clés, vous pouvez le faire:

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