可能重复:
替换python中的switch语句?
假设我在Python中有一个列表:
列表=('ADD'、'SUB'、'PUSH'、'POP')
我想根据输入运行一个函数,该输入可以是列表中的任何值。
没有为list
中的每个元素编写一个开关用例语句,有没有更紧凑的编写方法?
我的理由是,该名单今后会不断增加。
您也可以使用这样的模式(因为匆忙,所以无法清理):
>>> class Test(object):
... def test_FOO(self):
... print 'foo'
...
... def test_BAR(self):
... print 'bar'
...
>>> def run_on(cls, name):
... getattr(cls, 'test_%s' % name)()
...
>>> run_on(Test(), 'FOO')
foo
嗯,在Python中没有开关/案例语句。
对于一个小的list
,您需要使用if
/elif
:
def do_stuff(x, *args):
if x == 'ADD':
return do_add(*args)
elif x == 'SUB':
return do_sub(*args)
# …
else:
raise RuntimeError('Never heard of {}'.format(x))
对于更大的列表
,您需要确保每个案例都是一个函数(我在上面已经假设过了,但是如果您有类似return args[0]args[1]
的代码,则必须将其更改为do\u add
函数),并创建一个dict
将名称映射到函数:
func_map = {'ADD': do_add, 'SUB': do_sub, … }
def do_stuff(x, *args):
try:
return func_map[x](*args)
except KeyError:
raise RuntimeError('Never heard of {}'.format(x))
这是因为在Python中,函数是可以像其他对象一样传递的普通对象。因此,您可以将它们存储在dict
中,从dict
中检索它们,然后仍然调用它们。
顺便说一句,FAQ中已经解释了这些,还有一些额外的幻想。
如果您想调用某个默认函数而不是引发错误,那么很明显如何使用If
/elif
/else
链来实现这一点,但是如何使用dict
映射呢?您可以通过将默认函数放入except
块来实现,但有一种更简单的方法:只需使用dict.get
方法:
def do_stuff(x, *args):
return func_map.get(x, do_default)(*args)
问题内容: 我有一个表,其数据对的建模如下: 然后总是更大。这些对表示要进行的替换。因此,将100替换为50,然后将50替换为40,然后将其替换为10。 因此结果将是这样的: 有没有一种我可以更改或加入此表来表示的简洁方法? 我知道我可以自己加入类似于以下内容的内容: 但是,这需要多次通过,因此,为什么我问是否有更好的方法来完成它? 问题答案: 结果:
问题内容: 我正在阅读最近发布的The Go Programming Language ,到目前为止,这是一件令人高兴的事情(Brian Kernighan是其中的一位作者,无论如何我都不会期待别的什么)。 我在第3章遇到了以下练习: 练习3.13尽可能紧凑地通过YB 编写KB,MB的声明。 ( 注 :在此上下文中,KB,MB等表示1000的幂) 在此之前有一节,其中介绍了一种有用的常量生成器机制
我试图通过GridBagLayout实现以下目标: 框架将接收一组“字段”(JLabel,JTextField对),我想以“网格状”的方式排列它们,其中一行将包含两个这样的对(JLabel1 JField1 JLabel2 JField2)。当一行包含这四个组件时,下一个组件将添加到另一行。 编辑:我希望组件从面板顶部开始 我的代码生成以下布局。我希望组件的布局更紧凑(尤其是垂直距离) 下面是代码
在解析文件时,我会遍历文件的列标题,看看其中一个是否等于(忽略大小写)compare和: 使用字符集读取该文件: 观察调试器会发现值是非紧凑字符串(UTF-16),而值是紧凑字符串(ASCII): 这是默认行为还是bug?如何使的计算结果为?
这里我有两个类DemoParent和DemoChild,它们扩展了DemoParent,在DemoParent中我有通用方法m1(int I),但在DemoChild中我有varargs方法m1(int…I)。当我创建子类的对象并调用m1方法时,它会给我父类方法输出。请参见下面的输出。o/p-母公司 有人能解释为什么父类方法总是从子类引用调用,即使子类具有相同的方法? 但是如果我们反向代码,即父类
上面的代码是创建魔方的代码。我如何以更简单的形式编写下面的代码,让java初学者能够理解?