在Python中实现C类型Switch语句时的困惑

时间:2014-01-27 09:26:35

标签: python

我正在尝试使用字典在Python中实现switch语句,但我遇到了一个问题。

以下是我的尝试:

print "Enter value of i"
i=eval(raw_input())

j=0
def switch(i):
    print "Hello\n"
    return {True: 'gauw',
            i==1: a(10),
            i==2: a(20),
            }[True]
def a(t):
    global j
    j=t
switch(i)
print j

输出:

输入i的值

1

20

但是我期待10输出。所以,这里的主要问题是,它正在执行i==1&的两个语句。 i==2。另外,我不能在这里使用break

那么如何获得理想的输出?

3 个答案:

答案 0 :(得分:2)

你真的让自己变得复杂吗?如果只是执行switch,请使用if和elif。

def switch(i):
    if i==1:
        a(10)
    elif i==2: #Even if here wil work, instead of elif
        a(20)
    else:
        return 'gauw'()

会做的伎俩

答案 1 :(得分:1)

我认为你的开关应该是:

print "Enter value of i"
i=eval(raw_input())

j=0
def switch(i):
    print "Hello\n"
    try:
        return {
                1: a,
                2: b,
                }[i]()
    except:
        // default action here
        return 'gauw'
def a():
    global j
    j=10
def b():
    global j
    j=20
switch(i)
print j

a(10),a(20)都是在构建字典时调用的

编辑添加默认案例,因为有人关心此事。

答案 2 :(得分:0)

我将行动与逻辑分开,如下所示:

action_dict = dict([
    (1, lambda: a(10)),
    (2, lambda: a(20)),
    ])

def switch(value, actions):
    if value in actions:
        return actions[value]()
    return 'gauw'

print "Enter value of i"
i=eval(raw_input())

switch(i, action_dict)