2015-04-19 1 views
3

je, par exemple, 3 fonctions, avec des arguments nécessaires (certains arguments sont partagés par les fonctions, dans un ordre différent):arguments de mot-clé passer comme arguments nécessaires en Python

def function_one(a,b,c,d,e,f): 
    value = a*b/c ... 
    return value 

def function_two(b,c,e): 
    value = b/e .. 
    return value 

def function_three(f,a,c,d): 
    value = a*f ... 
    return value 

Si j'ai le prochain dictionnaire :

argument_dict = {'a':3,'b':3,'c':23,'d':6,'e':1,'f':8} 

Est-es posible pour appeler les fonctions de cette manière ??:

value_one = function_one(**argument_dict) 
value_two = function_two (**argument_dict) 
value_three = function_three (**argument_dict) 
+0

Avez-vous essayé? – wwii

+0

Oui j'ai essayé et je TypeError que Daniel dit –

Répondre

4

Pas de la façon yo Vous avez écrit ces fonctions, non: ils ne s'attendent pas à ce que les arguments supplémentaires provoquent une erreur TypeError.

Si vous définissez toutes les fonctions aussi attendent **kwargs, les choses fonctionnent comme vous voulez.

+0

Merci Daniel, donc la façon pythonique de funcions d'écriture est ce (par exemple): def function_two (b, c, e, ** kwargs): ... def function_three (f, a, c, d, ** kwargs): ... Or cette ??: def function_two (** kwargs): ... def function_three (**) kwargs : ... –

+0

la clé est de comprendre ce que vous savez que vous allez donner à la fonction. Disons que je sais que nous donnerons la fonction a et b et ensuite un tas d'autres arguments, vous pouvez utiliser def f (a, b, * args) alors si je vais aussi utiliser des arguments, def f (a, b, * args , ** kwargs). (Kwargs sont du type c = 1, d = 2) –

1

Je suppose que vous essayez de faire est de créer une fonction avec un nombre indéfini d'arguments. Vous pouvez le faire en utilisant args (arguments) ou kwargs (arguments de mot clé genre de 'bar' foo =) style si par exemple:

pour les arguments

def f(*args): print(args) 

f(1, 2, 3) 
(1, 2, 3)` 

puis pour kwargs

def f2(**kwargs): print(kwargs) 

f2(a=1, b=3) 
{'a': 1, 'b': 3} 

Essayons quelques plus de choses.

def f(my_dict): print (my_dict['a']) 

f(dict(a=1, b=3, c=4)) 
1 

Cela fonctionne !!! , vous pouvez le faire de cette façon et le compléter avec kwargs si vous ne savez pas ce que la fonction pourrait recevoir.

Bien sûr, vous pouvez faire:

argument_dict = {'a':1, 'b':3, 'c':4} 
f(argument_dict) 
1 

Vous ne devez pas utiliser kwargs et args tout le temps. Tout dépend du niveau d'abstraction de l'objet que vous passez à la fonction. Dans votre cas, vous passez un dictionnaire afin que vous puissiez gérer ce type sans seulement.