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,我无法弄清楚问题
问题是:
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)