Python开关案例

Ver*_*123 0 python switch-statement

我试图在python上使用字典作为switch case,但是,参数似乎没有传递给被调用的函数,请帮助:

def switchcase(num,cc):
    def fa(num):
        out= num*1.1;
    def fb(num):
        out= num*2.2;
    def fc(num):
        out= num*3.3;
    def fd(num):
        out= num*4.4;
    options = {
        "a":fa(num),
        "b":fb(num),
        "c":fc(num),
        "d":fd(num)
        } 
    out=0
    options[cc];
    return out
print switchcase(10,"a")
Run Code Online (Sandbox Code Playgroud)

输出为0,我无法弄清楚问题

mgi*_*son 6

问题是:

out=0
options[cc];
return out
Run Code Online (Sandbox Code Playgroud)

基本上 - 无论是什么options[cc]给你,你都会回来,0因为那是价值out.请注意,out在各种fa,, fb...函数中设置不会更改out调用者的值.

你可能想要:

def switchcase(num,cc):
    def fa(num):
        return num*1.1;
    def fb(num):
        return num*2.2;
    def fc(num):
        return num*3.3;
    def fd(num):
        return num*4.4;
    options = {
        "a":fa(num),
        "b":fb(num),
        "c":fc(num),
        "d":fd(num)
        } 
    return options[cc];
Run Code Online (Sandbox Code Playgroud)

还要注意,这在实践中会非常低效.每次打电话时,您都会创建4个功能(并且每个功能都会调用)switchcase.

我猜你真的想要创建一个预制的功能图.然后,您可以从地图中选择您真正想要的功能,并使用给定的数字调用它:

def fa(num):
    return num*1.1

def fb(num):
    return num*2.2

def fc(num):
    return num*3.3

def fd(num):
    return num*4.4

OPTIONS = {
    "a":fa,
    "b":fb,
    "c":fc,
    "d":fd
} 

def switchcase(num,cc):
    return OPTIONS[cc](num)
Run Code Online (Sandbox Code Playgroud)

  • 我现在补充一点,`switchcase(num,cc)`除了`options [cc](num)`之外什么都不做,根本不值得拥有这个功能. (2认同)