我正在尝试使用字典作为切换。我写了它:
a = {'1': f1(x, y), '2': f2(x)}
while True:
try:
selection = getOption()
b = a[selection]
break
except Exception:
print "Error"
但我有以下问题:如果我选择1,我不想运行f2,但似乎虽然我选择了选项1,但f2运行。我该如何解决?
谢谢
答案 0 :(得分:3)
在您的代码中,创建字典已经执行了这些功能。要防止这种情况,您应该在字典中存储对函数对象的引用,而不是函数执行的结果。对于您的特定情况,您可以使用lambda函数:
a = {'1': lambda: f1(x, y), '2': lambda: f2(x)}
selection = getOption()
b = a[selection]()
注意最后一行末尾的一对括号,以调用从字典中检索的函数对象。
如果所有函数都接收到相同的参数集,比如(x, y)
,则可以将其简化为
a = {'1': f1, '2': f2}
selection = getOption()
b = a[selection](x, y)