【发布时间】:2019-04-03 23:58:10
【问题描述】:
我试图使用 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 中的每个函数。
这是 Python 中的预期行为吗?
有没有办法只调用与键对应的函数?
【问题讨论】:
-
更改为
def switch(f): print('Switch got: ', f) func = { 1: func1, 2: func2, 3: func3 }.get(f) return func() if func is not None else False -
The third answer on that page 看起来正是您所需要的
-
@Eric 不确定我是否可以使用 lambda,因为实际代码比发布的更复杂。但我明白你的意思。谢谢
-
“由于某种原因,里面的所有函数都被调用了”,因为你明确地调用它们
-
@ZeCarioca:
lambda: my_complex_code()