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中的预期行为吗?
有没有办法解决,仅调用与键对应的功能?
这是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)