0

Je crée une solution de marché de base très basique qui serait utilisée dans les magasins de paris. J'ai une fonction qui ressemble à ceci:Comment sauter les arguments optionnels dans python, et appeler directement les arguments

def create_market(name, match, providerID=str(uuid.uuid4()), market_kind=4, *market_parameters): 

Je veux appeler une fonction avec seulement name, match et market_parameters tout en sautant le providerID et market_kind (puisque ceux-ci sont en option)

Gardez à l'esprit que *market_parameters sera un tuple de dicts qui seront envoyés à l'intérieur de la fonction. Je déballe comme:

for idx, data in enumerate(args): 
    for k, v in data.iteritems(): 
     if 'nWays' in k: 
      set_value = v 

Quand je mets ce dict comme

market_parameters = {'nWays' : 5} 

et appeler une fonction comme create_market('Standard', 1, *market_parameters)

Je ne peux pas sembler obtenir les données à l'intérieur du corps de la fonction.

Qu'est-ce que je fais mal?

+1

* "' * market_parameters' le seront être un dict * * - tuple, pour les paramètres de position; '** kwargs' serait le dictionnaire. – jonrsharpe

+0

@jonrsharpe oui, c'est correct :) J'allais écrire que * market_parameters sera un nombre inconnu de dicts qui seraient passés en liste (tuple) dans une fonction. – mutantkeyboard

Répondre

1

En déballer comme *market_parameters, vous envoyer des valeurs non emballés comme providerID (si vous avez plus de valeurs dans votre dictionnaire puis comme providerID, market_kind et ainsi de suite).

Vous devez probablement

def create_market(name, match, *market_parameters, 
        providerID=str(uuid.uuid4()), market_kind=4): 

et appeler la fonction comme:

create_market('Standard', 1, market_parameters) # you don't need to unpack it. 

et si vous souhaitez définir providerID ou market_kind alors:

create_market('Standard', 1, market_parameters, providerID=your_provider_id, market_kind=your_market_kind) 
+0

Oui. C'est tout. Merci @Yevhen Kuzmovych. Vous êtes un épargnant de vie. – mutantkeyboard

+0

@mutantkeyboard Je ne suis pas sûr de ce que vous essayez de faire mais [kwargs] (http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python) peut être utile. –