Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中switch语句上不同值的相同输出_Python_Switch Statement - Fatal编程技术网

python中switch语句上不同值的相同输出

python中switch语句上不同值的相同输出,python,switch-statement,Python,Switch Statement,我在phyton中有这段代码,我想这样做,如果输入是-1,那么返回的也是字符串“zero” 所以我想知道是否有任何方法可以让我做一些事情,比如: switcher = { 0 or -1: "zero", 1: "one", 2: "two", } 您只需添加一个附加键: def IntToStr(argument): switcher = {0: "

我在phyton中有这段代码,我想这样做,如果输入是-1,那么返回的也是字符串“zero”

所以我想知道是否有任何方法可以让我做一些事情,比如:

switcher = { 
        0 or -1: "zero", 
        1: "one", 
        2: "two", 
    } 

您只需添加一个附加键:

def IntToStr(argument): 
    switcher = {0: "zero", 
               -1: "zero",
                1: "one", 
                2: "two"} 

   return switcher.get(argument, "nothing")
也可以在函数的开头添加一行:

def IntToStr(argument): 
    argument = 0 if argument == -1 else argument
    switcher = {0: "zero", 
                1: "one", 
                2: "two"} 

   return switcher.get(argument, "nothing")

您只需添加一个附加键:

def IntToStr(argument): 
    switcher = {0: "zero", 
               -1: "zero",
                1: "one", 
                2: "two"} 

   return switcher.get(argument, "nothing")
也可以在函数的开头添加一行:

def IntToStr(argument): 
    argument = 0 if argument == -1 else argument
    switcher = {0: "zero", 
                1: "one", 
                2: "two"} 

   return switcher.get(argument, "nothing")

您可以使用defaultdict(来自集合)并将键表示为元组,然后在最终切换器内容中展开元组。这样,您就不必重复公共键的值。您也不需要在执行.get()操作的任何地方重复默认值:

您可以通过创建一个函数来概括这一点,该函数将对任何切换字典进行元组扩展:

from collections import defaultdict
def switch(d,default=None):
    return defaultdict(lambda:default,
           { k:v for ks,v in d.items() for k in ks })

switcher = switch({ (0,-1): "zero", 
                      (1,): "one", 
                      (2,): "two"},
                 default  = "nothing")
如果您希望模拟switch/case语句的行为,则可以创建一个函数,用于一次过for循环:

def switch(value): yield lambda *match: value in match
用法:

x = -1
for case in switch(x):
    if   case(-1,0) : r = "zero"
    elif case(1)    : r = "one"
    elif case(2)    : r = "two"
    else            : r = "nothing"
print(r) # zero

您可以使用defaultdict(来自集合)并将键表示为元组,然后在最终切换器内容中展开元组。这样,您就不必重复公共键的值。您也不需要在执行.get()操作的任何地方重复默认值:

您可以通过创建一个函数来概括这一点,该函数将对任何切换字典进行元组扩展:

from collections import defaultdict
def switch(d,default=None):
    return defaultdict(lambda:default,
           { k:v for ks,v in d.items() for k in ks })

switcher = switch({ (0,-1): "zero", 
                      (1,): "one", 
                      (2,): "two"},
                 default  = "nothing")
如果您希望模拟switch/case语句的行为,则可以创建一个函数,用于一次过for循环:

def switch(value): yield lambda *match: value in match
用法:

x = -1
for case in switch(x):
    if   case(-1,0) : r = "zero"
    elif case(1)    : r = "one"
    elif case(2)    : r = "two"
    else            : r = "nothing"
print(r) # zero

我尝试了第二个字典,调用switcher[-1]可以完美地返回“零”。但是,我不知道为什么切换器[0]会出现一个键错误。我确实尝试了第二个字典,调用切换器[-1]可以完美地返回“零”。但是,我不知道为什么切换器[0]会出现一个键错误。