python'switch'(dict)是否应该调用内部的每个func?

问题描述 投票:1回答:2

我试图使用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 switch-statement
2个回答
6
投票

这是Python中的预期行为吗?

是。

有没有办法,只有与密钥对应的函数被调用?

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

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

1
投票

调用函数“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()
© www.soinside.com 2019 - 2024. All rights reserved.