我是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
而不是最后一个函数调用。我做错了什么?
答案 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]