1

我尝试在 Python 中实现 switch/case 机制。在阅读了几个网站和这里的问题(例如这个)之后,我构建了下面的代码。但它的行为是错误的,具有我所理解的 - 一个失败,这甚至可能是有问题的,当然不是默认的预期结果。

def something():
    print 'something'

def somethingElse():
    print 'something else'

def switch():
    cases = {
        0: something(),
        1: something(),
        2: something(),
        3: something(),
        4: something(),
        5: something()
        }

    cases.get(2, somethingElse())

switch()

(显然,每种情况下的相同开关只是为了示例)

当我运行它时,我希望something()只运行一次(因为我手动输入2)。但是,控制台中的输出是:

something
something
something
something
something
something
something else

什么意思它运行了 6 次加上默认值运行。我无法理解这段代码中的什么允许这样的失败?或者问题可能不同?

这里是 Python 2.7.12。

4

2 回答 2

3

您的字典在创建案例时会调用每个函数。您的函数打印(副作用)而不是返回字符串,因此您可以看到打印到控制台的所有字符串。

相反,您的开关应该返回一个函数,然后您可以调用该函数。

def something():
    print 'something'

def somethingElse():
    print 'something else'

def switch():
    cases = {
        0: something,
        1: something,
        2: something,
        3: something,
        4: something,
        5: something
        }

    # All of the values in `cases` are functions so it is safe
    # to call whatever `cases.get(...)` returns.
    cases.get(2, somethingElse)()

switch()
于 2017-04-19T03:05:30.177 回答
1

您需要返回函数名称,然后调用它。像这样

def something():
    print ('something')

def somethingElse():
    print ('something else')

cases = {1: something, 2: something, 3:something, 4:something,5:something}
result = cases.get(2, somethingElse)()

~

于 2017-04-19T04:05:49.720 回答