Python字典行为

时间:2014-04-30 09:48:03

标签: python-2.7 dictionary

我是Python的新手,但是经验丰富的C开发人员。我正在编写一个脚本,其中C等效于switch / case,我不得不做字典实现。我想要做的基本上是将字典设置为字符/函数对。然后从键盘上读取字符。

这是代码

...
def func1():
    print "func1"

def func2(Val):
    print "func2 " + Val

def func3(Val):
    print "func3 " + Val

key=getch()
if key in ['s', 't', 'a']:
    print key
    {'a' : func1(),
     's' : func2("Hello"),
     't' : func3("Bye")                                                              
     }[key]
...

我得到的结果是按下 t

func1
func2 Hello
func3 Bye

而不是最后一个函数调用。我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是,当您将这些函数放入字典时,您已经调用了这些函数。试试这个:

if key in ['s', 't', 'a']:
    print key
    {'a' : lambda: func1(),
     's' : lambda: func2("Hello"),
     't' : lambda: func3("Bye")                                                              
     }[key]()

这创建了包含实际函数调用的lambda表达式(另一种可调用函数),包括它们各自的参数(如果函数没有参数,你也可以只做'a' : func1,而没有{ {1}})。然后,您获得与密钥对应的lambda并将其调用(请注意()之后的其他()

或者,您也可以在检查密钥之前创建dict:

[key]