web-dev-qa-db-fra.com

Passer tous les arguments d'une fonction à une autre fonction

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

Initialement

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

mais si ma signature func1 est

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

comment les envoyer tous à func2, sans utiliser

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

Existe-t-il un moyen comme en javascript callee.arguments?

62
roopesh

Explicit vaut mieux qu'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 des variables locales, vous ne pouvez donc pas définir de variables supplémentaires avant d'appeler func2 ou elles seront également transmises.

51
Jochen Ritzel

À condition que les arguments de func1 ne soient que des arguments de mots clés, vous pouvez le faire:

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