Python交换机cas

2024-04-27 11:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python上使用dictionary作为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")

输出为0,我无法解决问题


Tags: 函数参数fbdictionarydefoutnumfa
3条回答

这是另一种选择。您只需导航到切换器外部的必要方法,如果需要,还可以传递可选参数:

def fa(num):
    return num*1.1
def fb(num):
    return num*2.2
def fc(num):
    return num*3.3
def fd(num, option=1):
    return num*4.4*option
def f_default(num):
    return num

def switchcase(cc):
    return {
        "a":fa,
        "b":fb,
        "c":fc,
        "d":fd,
    }.get(cc, f_default)

print switchcase("a")(10)  # for Python 3  > print(switchcase("a")(10))
print switchcase("d")(10, 3)  # for Python 3  > print(switchcase("d")(10, 3))

print(switchcase("a")(10))

11.0

print(switchcase("d")(10, 3))

132.0

print(switchcase("ddd")(10))

10

问题是:

out=0
options[cc];
return out

基本上不管options[cc]给你什么,你都要返回0,因为那是out的值。注意,在各种fafb中设置out。。。函数不改变调用者中out的值。在

你可能想要:

^{pr2}$

还要注意的是,这在实践中会非常低效。每次调用switchcase时,都要创建4个函数(并调用每个函数)。在

我猜你实际上想创建一个预先制作的函数映射。然后,您可以从地图中选择您实际想要的函数,并用给定的数字调用它:

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)

另一个简短的版本是:

def switchcase(num, cc):
    return {
        "a": lambda: num * 1.1,
        "b": lambda: num * 2.2,
        "c": lambda: num * 3.3,
        "d": lambda: num * 4.4,
        }.get(cc, lambda: None)()

print (switchcase(10,"a"))

相关问题 更多 >