python“开关”(dict)是否应该调用内部的每个函数?

ZeC*_*oca 1 python switch-statement

我正在尝试使用python开关编写代码,如在dict中所建议的那样模拟:替换Python中的switch语句?[第二答案,尼克]

当我测试时,出于某种原因,内部的所有函数都被调用,尝试了一个简单的代码来查看出了什么问题并重复了问题。看到:

def switch(f):
    print('Switch got: ', f)
    var = {
        1: func1(),
        2: func2(),
        3: func3()
        }.get(f,False)
    return var

def func3():
    fb = 'Func3 called'
    print(fb)
    return fb

def func1():
    rsp = 'Func1 called'
    print(rsp)
    return rsp

def func2():
    rsp = 'Func2 called'
    print(rsp)
    return rsp

var = switch(1)
print(var)
Run Code Online (Sandbox Code Playgroud)

我的预期回报是:

Switch got:  1
Func1 called
Run Code Online (Sandbox Code Playgroud)

相反,我得到了:

Switch got:  1
Func1 called
Func2 called
Func3 called
Func1 called
Run Code Online (Sandbox Code Playgroud)

我从中得到的是,python似乎在调用适当的键(示例中为1)之前在dict中运行了所有func。

这是Python中的预期行为吗?

有没有办法解决,仅调用与键对应的功能?

wim*_*wim 6

这是Python中的预期行为吗?

是。

有没有办法解决,仅调用与键对应的功能?

创建调度字典时,请不要实际调用函数:

def switch(k):
    print('Switch got: ', k)
    func = {
        1: func1,
        2: func2,
        3: func3,
    }.get(k, bool)
    var = func()
    return var
Run Code Online (Sandbox Code Playgroud)