2014-06-30 6 views
0

J'ai déjà rencontré ce problème, mais il n'a pas été trop important jusqu'à maintenant: passer par toutes les combinaisons données 3 ou 4 variables. Mon projet actuel est en Python, alors voici un exemple:Comment parcourir efficacement toutes les possibilités?

def function(var1, var2, var3): 
    if var1: 
     if var2: 
      if var3: 
       foo(bar) 
      else: 
       bar(foo) 
     else: 
      if var3: 
       ... 

Même cet exemple est un peu plus simple que le code, je travaille avec parce qu'il ya 3 à 4 possibilités pour chaque variable.

Je ne suis pas familier avec de nombreux concepts de programmation et j'ai le sentiment qu'il existe déjà une bonne réponse à cette question. Toute aide est appréciée. Merci d'avance!

+1

S'il vous plaît être plus précis à votre cas particulier – sshashank124

+0

que voulez-vous dire par les possibilités? –

+0

On dirait que ceci devrait être cuit dans une classe que 'foo' et' bar' utilisent. –

Répondre

7

Le remplacement de Python canonique pour beaucoup de if s est un dictionnaire:

from functools import partial 

def function(var1, var2, var3): 
    choices = {(True, True, True): partial(foo, bar), 
       (True, True, False): partial(bar, foo), 
       ...} 
    choices[tuple(map(bool, (var1, var2, var3)))]() 

(Dans les cas simples comme cela, vous pouvez utiliser lambda plutôt que functools.partial).

Ou, dans votre cas:

choices = {("past", "simple", 1, False): ..., 
      ...} 
1
def function(var1, var2, var3): 
    def foo(): 
     pass 

    def bar(): 
     pass 

    func = {('past', 'simple', 'first', 'plural'): foo, 
      ('past', 'simple', 'first', 'singular'): bar, 
      ('past', 'simple', 'second', 'plural'): foo, 
      ('past', 'simple', 'secord', 'singular'): bar, 
      ... 
      }[(var1, var2, var3)] 
    func() 
Questions connexes