切换3个变量的情况

问题描述 投票:-2回答:1

我可以用三个变量编写一个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)
python switch-statement
1个回答
0
投票

我进行了开关课程。它使用值(字典,键,值对)将值初始化,该值对代表每个值的操作,并作为一个包含函数和可选参数以及可选默认操作的列表。例如,您应该这样称呼它:

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()
© www.soinside.com 2019 - 2024. All rights reserved.