具有功能的字典

时间:2016-03-13 18:27:27

标签: python

我正在尝试使用字典作为切换。我写了它:

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运行。我该如何解决?

谢谢

1 个答案:

答案 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)