Une alternative au switch case, le dictionnaire!!

Une alternative au switch case, le dictionnaire!! - Python - Programmation

Marsh Posté le 19-10-2008 à 10:04:21    

Kikoo,  
 
J'ai un code où j'ai plein de if/else dans tous les sens et j'ai eu l'idée d'utiliser un dictionnaire comme switch case:

Code :
  1. for elt in elt_rech: #pour chaque élémént à rechercher
  2.    try:
  3.       {'dflt': default(elt,i,s),'date':case_date(elt,i,s,dicoJour)}[elt.flag]
  4.    except KeyError:
  5.       print u"Le flag d'une expression régulière a mal été encodée!!\n"


Ainsi, lorsque le flag de elt est dflt, il passe dans la fonction dflt et lorsque le flag vaut date, il passe dans la fonction date (y a une dizaine de cas dans mon dico, mais je ne vous en ai mis que 2  :) )
Cependant, pour une obscure raison que j'ignore, il n'a malheureusement pas du tout l'effet escompté car au lieu de se rendre uniquement dans la fonction désirée, un élément visite toutes les fonction (ce qui a des résultats désastreux). Quelqu'un sait-il à quoi c'est dû?

Reply

Marsh Posté le 19-10-2008 à 10:04:21   

Reply

Marsh Posté le 19-10-2008 à 11:19:17    

bha c'est logique. Il les appelle lors de la construction du dictionnaire.
Faut utiliser des lambda...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 19-10-2008 à 12:18:10    

KangOl a écrit :

bha c'est logique. Il les appelle lors de la construction du dictionnaire.
Faut utiliser des lambda...


 
J'ai trouvé un autre truc, il suffit de faire :

Code :
  1. {'dflt': default,'date':case_date,'dateComp':case_dateComp}[elt.flag](elt,i,s,dicoJour,elt_spe)


 
Ainsi il ne construit pas la fonction lors de la construction du dictionnaire :)
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed