我试图使用python开关编写代码,在dict中模拟如下所示:Replacements for switch statement in Python? [第二个答案,由Nick]
当我测试时,由于某种原因,内部的所有函数都被调用,尝试了一个简单的代码来查看错误和重复的问题。看到:
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)
我的预期回报只是:
Switch got: 1
Func1 called
取而代之的是:
Switch got: 1
Func1 called
Func2 called
Func3 called
Func1 called
我从中获得的是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
调用函数“switch”时初始化该字典的行为也会调用这些函数。尝试这样的事情,
def switch(f):
print('Switch got: ', f)
var = {
1: func1,
2: func2,
3: func3
}.get(f,False)
if not var:
return false
return var()