带函数的词典

2024-03-28 22:09:13 发布

您现在位置: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运行。我该怎么修

谢谢


Tags: true字典选项exceptionerrorf2f1print
1条回答
网友
1楼 · 发布于 2024-03-28 22:09:13

在代码中,创建字典已经执行了这些函数。为了避免这种情况,应该在字典中存储对函数对象的引用,而不是函数执行的结果。对于您的特定情况,可以使用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)

相关问题 更多 >