2017-10-14 3 views
0

J'ai la fonction suivante:Comment vérifier si un kwarg est égale à une valeur spécifique

def find_data(**data): 
    if data == 'price': 
     ## do something 
     print 'yes' 

mais quand je demande à la fonction ci-dessous ne se passe rien:

find_data(data='price') 

Mon résultat attendu est pour que la fonction exécute une opération quand data = price (et pour data = close, par exemple). Je me demandais s'il y avait une façon plus pythonique, plus courte alors:

def find_data(**data): 
    for k, v in data.items(): 
     if v == 'price': 
      print 'yes' 
+0

'si les données [ "data"] == "prix"' travaillerait –

+0

Est-ce considéré comme la pratique courante? (Merci, je l'aime concis) –

+2

@ thomas.mac L'idiome (pratique standard) est de nommer la variable pour kwargs 'kwargs' et ensuite l'utiliser comme un dictionnaire. C'est son but. – zxq9

Répondre

2

Vous voulez référencer kwargs comme un dictionnaire.

idiomatiques:

def find_data(**kwargs): 
    if kwargs['data'] == 'price': 
     ## do something 
     print 'yes' 

Comme un additif ... il est bon de garder à l'esprit que plus vous en savez sur les arguments qui entrent en fonction moins fou cheveux votre code aura tendance à croître au fil du temps (c'est-à-dire, moins le polymorphisme et le variadisme vous engagent dans la plus claire la sémantique de votre code aura tendance à être au fil du temps). Il est donc bon de bien réfléchir pour savoir si vous avez vraiment besoin de passer "juste quelques arguments aléatoires" ou si vous devriez plutôt recevoir un dictionnaire d'une forme spécifique en tant qu'argument simple ou peut-être recevoir cette valeur spécifique en tant qu'explicite argument de son propre. Vous mélangez un argument de mot-clé avec un dictionnaire de paramètres

1

Dans find_data, data est le dictionnaire des mots-clés arguments (mal nommé, comme il est généralement appelé kwargs). Comparer data à une chaîne ne fonctionne pas (pas les mêmes types). Vous voulez:

def find_data(**data): 
    if data["data"] == 'price': 
     ## do something 
     print('yes') 

find_data(data="price") 
+0

pourquoi la downvote ? pas expliqué correctement? –

+0

Oui, je ne comprends pas le downvote - parce que techniquement, vous avez raison. Mais là encore, c'est peut-être parce que quelques variables en Python ont des noms standards par convention comme 'self',' args' et 'kwargs'. ? – zxq9

+0

oui, j'expliquais la confusion. mon explication est probablement maladroite. Et le downvote est de la police python DV: l'utilisateur de salut-rep répondant à des questions "triviales" pas parfaitement comme il se doit. bien, sc ** w eux. –