如何在python中创建一个Case/Switch而不出现所有中断,并在两个Case之间编写代码
我知道Java和C,并且我曾经使用Switch语句,但python中没有 我看到了很多使用elif的方法,但是任何一种方法都是完全的 我想要删除的代码示例如何在python中创建一个Case/Switch而不出现所有中断,并在两个Case之间编写代码,python,if-statement,switch-statement,Python,If Statement,Switch Statement,我知道Java和C,并且我曾经使用Switch语句,但python中没有 我看到了很多使用elif的方法,但是任何一种方法都是完全的 我想要删除的代码示例 switch(expression) { case a: doA(); case b: doB(); case c: doC(); break; case d: case e: doDE() break; case f:
switch(expression) {
case a:
doA();
case b:
doB();
case c:
doC();
break;
case d:
case e:
doDE()
break;
case f:
case g:
doFG():
case h:
doH();
break;
case i:
doI();
default:
foo();
break;
}
正如您所看到的,并不是所有的case后面都是break,有些case之间的代码只在一个case中执行,但也有在两个case中执行的公共代码
我看到了很多方法,但任何一种方法都可以同时做到这一点。我认为这就是if-elif-else和switch-case之间的真正区别
因此,有任何方法可以做到这一点,这将是伟大的,或者它只可能与重复的函数调用和复杂的,如果与所有的可能性
谢谢。switch语句被认为是有害的。这可能就是Python没有它的原因。故障行为是C代码中错误的主要来源。很容易忘记一个
中断代码>这就是为什么C#不允许它——你必须使用显式的goto
。Python的函数目录方法也是如此。您对下一个函数进行了调用。“显性比隐性好”
对函数进行dict(使用标识符键)的最简单方法是使用类
声明
class switch:
def a():
print('a')
switch.b()
def b():
print('b')
switch.c()
def c():
print('c')
def d():
switch.e()
def e():
print('de')
def f():
switch.g()
def g():
print('fg')
def h():
print('h')
def i():
print('i')
switch.default()
def default():
print('foo')
像这样使用它
>>> expression = 'a'
>>> getattr(switch, expression, 'default')()
a
b
c
如果需要实际的dict,还可以提取\uuuu dict\uuu
属性
>>> switch.__dict__.get('e', 'default')()
de
如果使用if
语句,也可以使用类似的显式语句
def switch(case)
if case == a:
doA()
case = b
if case == b:
doB()
case = c
if case == c:
doC()
return
if case == d:
case = e
if case == e:
doDE()
return
if case == f:
case = g
if case == g:
doFG()
case = h
if case == h:
doH()
return
if case == i:
doI()
foo()
如果您担心改变条件的副作用,或者如果条件比简单相等更复杂,并且您不想重复它们,那么可以使用helper变量,而不是重新指定case
def switch(case):
fall = False
if case == a:
doA()
fall = True
if fall or case == b:
doB()
fall = True
if fall or case == c:
doC()
return
if case == d:
fall = True
if fall or case == e:
doDE()
return
if case == f:
fall = True
if fall or case == g:
doFG()
fall = True
if fall or case == h:
doH()
return
if case == i:
doI()
foo()
if
语句可以执行任何条件。你只需要更明确一点
def switch(case):
if case in 'a':
doA()
if case in 'ab':
doB()
if case in 'abc':
doC()
return
if case in 'de':
doDE()
return
if case in 'fg':
doFG()
if case in 'fgh':
doH()
return
if case in 'i':
doI()
foo()
我看到了这篇文章:,但我没有找到任何解决方案能给我一个完整的解决方案。把案例分解成函数,把函数放到字典里。具有本应“失效”的函数,只需调用下一个函数即可。可能是麻烦太多了。我一生中从未需要过如此巨大的开关
或if
语句。你确定你的代码没有做错什么吗?你能给我们一些背景资料,以便我们能提出替代解决方案吗?它没有上下文,我想要案例陈述,我想知道是否有一个解决方案,允许所有案例的组合。谢谢大家,我认为最好的解决方案是由glich给出的。我知道如果你可以做任何情况,但我看到了许多复杂的方法来模拟案例的句法,但所有人都必须做一些额外的事情,或者不允许与“案例”陈述完全相同。我认为我现在找到的最好的解决办法是使用一个类,在一个案例结束时调用下一个类,如果我不想破坏的话。谢谢。我看到了许多复杂的解决方案,但任何像这样简单和复杂的解决方案,我想避免在没有中断的情况下调用显式的下一个“case”,但这很容易理解,我认为这是模拟case语法的一个好方法。