【问题标题】:Refactoring Repeated if Statements重构重复的 if 语句
【发布时间】:2015-05-28 19:36:32
【问题描述】:

我的代码如下所示:

var1 = do_something_1()
if param == 'A':
    var1 = do_something_A_1()

var2 = do_something_2(var1)
if param == 'B':
    var2 = do_something_B_1()

var3 = do_something_3(var2)
if param == 'A':
    var3 = do_something_A_2()

var4 = do_something_4(var3)
if param == 'A':
    var4 = do_something_A_3()

我想知道是否有办法重构此代码中的 if 语句。

【问题讨论】:

    标签: python if-statement refactoring


    【解决方案1】:

    三元表达式+元组赋值怎么样?

    var1, var2, var3, var4, var5 = \
        (do_something_1(), do_something_2(), do_something_3(), do_something_4(), do_something_5()) if param == 'A' 
        else \ 
        (do_something_A_1(), do_something_A_2(), do_something_A_3(), do_something_A_4(), do_something_A_5())
    

    它不仅可以节省您评估将要丢弃的东西(假设您对副作用不感兴趣),还可以让您重新评估相同的表达式。

    【讨论】:

      【解决方案2】:

      你可以替换这个

      var1 = do_something_1()
      if param == 'A':
          var1 = do_something_A_1()
      

      var1 =  do_something_A_1() if param == 'A' else do_something_1()
      

      【讨论】:

      • 您似乎将 c 型三元组与 Python 混合在一起。
      • :-) 不,到了一半。再试一次。
      • 嗯...我想我需要一个解释,只是用repl.it检查过,一切似乎都很好。
      • 当我发表评论时,它的格式为... if ... : ...else 出现在它之后。无论如何,现在很好,我正在删除反对票(尽管我很想保留它以供您使用 Ruby [开个玩笑])。
      • 哦。是的。起初我错过了,但在评论后重新编辑)
      【解决方案3】:

      您可以这样做(对于 python 2.5 和更高版本)。

      var1 = do_something_A_1() if param == 'A'
      

      【讨论】:

        【解决方案4】:

        如果你清楚地说明这三种可能的情况如何,如下所示:

        def func(param):
            """
            :param 'A' or 'B' or 'C'
            """
            if param == 'A':
                var1 = do_something_1()
                var1 = do_something_A_1()
                var2 = do_something_2(var1)
                var3 = do_something_3(var2)
                var3 = do_something_A_2()
                var4 = do_something_4(var3)
                var4 = do_something_A_3()
                var5 = do_something_5(var4)
        
            elif param == 'B':
                var1 = do_something_1()
                var2 = do_something_2(var1)
                var2 = do_something_B_1()
                var3 = do_something_3(var2)
                var4 = do_something_4(var3)
                var5 = do_something_5(var4)
        
            elif param == 'C':
                var1 = do_something_1()
                var2 = do_something_2(var1)
                var3 = do_something_3(var2)
                var4 = do_something_4(var3)
                var5 = do_something_5(var4)
        
            return var5
        

        【讨论】:

        • 对于你的代码,有没有办法避免重复?
        猜你喜欢
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2015-02-16
        • 1970-01-01
        相关资源
        最近更新 更多