在Python中使用字典作为switch语句

时间:2014-02-23 00:56:09

标签: python dictionary

我正在尝试使用字典在Python中创建一个简单的计算器。这是我的代码:

def default():
    print "Incorrect input!"

def add(a, b):
    print a+b

def sub(a, b):
    print a-b

def mult(a, b):
    print a*b

def div(a, b):
    print a/b

line = raw_input("Input: ")
parts = line.split(" ")
part1 = float(parts[0])
op = parts[1];
part3 = float(parts[2])

dict = {
    '+': add(part1, part3),
    '-': sub(part1, part3),
    '*': mult(part1, part3),
    '/': div(part1, part3)
    }

try:
    dict[op]
except KeyError:
    default()

但所有功能都已激活。有什么问题?

2 个答案:

答案 0 :(得分:12)

将您的字典定义为str : function形式的对:

my_dict = {'+' : add, 
           '-' : sub, 
           '*' : mult, 
           '/' : div}

然后如果你想调用一个操作,使用my_dict[op]来获取一个函数,然后用相应的参数调用它:

 my_dict[op] (part1, part3)
|___________|
      |
  function (parameters)

注意:不要使用Python内置名称作为变量名称,否则您将隐藏其实现。例如,使用my_dict代替dict

答案 1 :(得分:11)

这是因为当填充字典时,它会使用操作数执行每个操作, 最后,您正在调用包含dict[op]的{​​{1}}并对其执行任何操作。

会发生什么:

None

这就是你获得所有输出的原因,而# N.B.: in case this is not clear enough, # what follows is the *BAD* code from the OP # with inline explainations why this code is wrong dict = { # executes the function add, outputs the result and assign None to the key '+' '+': add(part1, part3), # executes the function sub, outputs the result and assign None to the key '-' '-': sub(part1, part3), # executes the function mult, outputs the result and assign None to the key '*' '*': mult(part1, part3), # executes the function div, outputs the result and assign None to the key '/' '/': div(part1, part3) } try: # gets the value at the key "op" and do nothing with it dict[op] except KeyError: default() 块中没有任何结果。

您可能想要实际执行:

try

但正如@christian明智地建议的那样,你不应该使用python保留名称作为变量名,这可能会让你陷入困境。我建议你做的另一个改进是打印一次结果,并使函数lambdas:

dict = {
    '+': add,
    '-': sub,
    '*': mult,
    '/': div
    }

try:
    dict[op](part1, part3)
except KeyError:
    default()

将返回结果并打印出来