我可以用三个变量编写一个switch / case语句来替换此代码:
if where_clause == 0:
requete(liste_fields,schema,table)
elif where_clause == 1:
if like_clause == 0:
if any_clause == 1:
requete_where_any(liste_fields,schema,table,wc_1,any_1)
else:
requete_where(liste_fields,schema,table,wc_1,wc_2)
elif like_clause == 1:
requete_like(liste_fields,schema,table,like_1,like_2)
elif where_clause == 2:
requete_double_where(liste_fields,schema,table,wc_1,wc_2,wc_3,wc_4)
elif where_clause == 3:
requete_triple_or(liste_fields,schema,table,oc_1,oc_2,oc_3,oc_4,oc_5,oc_6)
我进行了开关课程。它使用值(字典,键,值对)将值初始化,该值对代表每个值的操作,并作为一个包含函数和可选参数以及可选默认操作的列表。例如,您应该这样称呼它:
sw = switch(some_value,
{
1:[print, 'hello'],
2:[print, 'goodby']
},
default=[print] ))
默认参数没有参数,因此只需打印新行。
调用开关时将调用相应的功能:
sw()
好处是,由于switch对象具有call方法,因此可以嵌套switch。
这里是您的案例的实现和应用:
class switch(dict):
def __init__(self, value, cases, default = ((lambda:None),)):
super().__init__(cases)
self.default = default
self.value = value
def __call__(self):
do = self.get(self.value, self.default)
return do[0](*do[1:])
sw = switch(where_clause,
{
0: [requete],
1: [switch(like_clause,
{
0: [switch(any_clause,
{
1: [requete_where_any,liste_fields,schema,table, wc_1, any_1]
},
default=[requete_where,liste_fields,schema,table, wc_1, wc_2])],
1: [requete_like,liste_fields,schema,table, like_1, like_2]
},
default=[requete_like,liste_fields,schema,table, like_1, like_2])],
2: [requete_double_where,liste_fields,schema,table, wc_1, wc_2, wc_3, wc_4),
3: [requete_triple_or,liste_fields,schema,table, oc_1, oc_2, oc_3, oc_4]
})
sw()