如何有效地完成所有可能性?

时间:2014-06-30 15:21:52

标签: python if-statement

我之前遇到过这个问题,但直到现在它还没有太重要:通过给出3或4个变量的所有组合。我目前的项目是Python,所以这里有一个例子:

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

即使这个例子比我使用的代码简单一点,因为每个变量有3到4种可能性。

我不熟悉许多编程概念,我觉得这个问题已经有了一个很好的答案。任何帮助表示赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:7)

许多if s的规范Python替换是字典:

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)))]()

(在这种情况下,您可以使用lambda而不是functools.partial)。

或者,在您的情况下:

choices = {("past", "simple", 1, False): ..., 
           ...}

答案 1 :(得分: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()