【问题标题】:Python variable between if and elifif 和 elif 之间的 Python 变量
【发布时间】:2017-12-19 21:30:28
【问题描述】:

以下是无效语法,因为 elif 必须紧跟在 if 块之后:

def get_number(self, bsObj):
    temp = self.get_data('text1', bsObj)
    if temp > -1:
        return temp
    temp = self.get_info('text', bsObj)
    elif temp > -1:
        return temp
    else:
        return 0

如果self.get_data('text1', bsObj) 小于-1,我只想返回self.get_info('text', bsObj) 的结果。

我可以通过这样做来解决它,但是两次调用同一个函数似乎非常无效:

def get_number(self, bsObj):
    if self.get_data('text1', bsObj) > -1:
        return self.get_data('text1', bsObj)
    elif self.get_info('text', bsObj) > -1:
        return self.get_data('text', bsObj)
    else:
        return 0

【问题讨论】:

  • 功能的重点就是这样
  • 感谢下面回答的所有人。我现在知道我错过了关于 return 语句所做的一些非常重要的事情。我错误地认为如果两个 if 语句都为 True,则第一个 return 语句将被第二个替换。我现在感觉很笨,但我也很高兴我现在学到了这个非常重要的一点。它现在真的会让我的编码变得更简单。所以谢谢大家。

标签: python python-3.x if-statement


【解决方案1】:

您可以使用第二个if

def get_number(self, bsObj):
    temp = self.get_data('text1', bsObj)
    if temp > -1:
        return temp
    temp = self.get_info('text', bsObj)
    if temp > -1:
        return temp
    else:
        return 0

由于第一个if 包含一个返回语句,如果满足约束,解释器将永远不会到达您的elif 行。

【讨论】:

    【解决方案2】:

    只需使用if 而不是elifel[se] 是多余的,因为 return 无论如何。

    【讨论】:

      【解决方案3】:

      注意return 退出函数,所以你不必担心你的分支逻辑。你是正确的,你不应该调用一个函数两次:继续为每个调用使用temp

      你有两个选择。第一种是简单地使用一个新的if;旧的已经离开了功能。

      temp = self.get_data('text1', bsObj)
      if temp > -1:
          return temp
      
      temp = self.get_info('text', bsObj)
      if temp > -1:
          return temp
      
      return 0
      

      另一种选择是在该块中正确包装“else”逻辑:

      temp = self.get_data('text1', bsObj)
      if temp > -1:
          return temp
      else:
          temp = self.get_info('text', bsObj)
          if temp > -1:
              return temp
          else:
              return 0
      

      【讨论】:

        【解决方案4】:

        试试这个:

        def get_number(self, bsObj):
            temp = self.get_data('text1', bsObj)
            if temp < -1:
                temp = self.get_info('text', bsObj)
            elif temp = -1:
                return 0
            else:
                pass
            return temp
        

        所以我所做的就是切换你的 if 和 elif 案例。如果 temp

        【讨论】:

          【解决方案5】:

          写得更简洁:

          def get_number(self, bsObj):
              temp = self.get_data('text1', bsObj) if self.get_data('text1', bsObj)>-1 else self.get_info('text', bsObj)
              return temp if temp>-1 else 0
          

          【讨论】:

            【解决方案6】:

            我不知道这是否有效,但我决定发布这个是为了好玩。

            def get_number(self, bsObj):
                temp = self.get_data('text1', bsObj)
                temp2 = self.get_info('text', bsObj)
                return temp if temp > -1 else temp2 if temp2 > -1 else 0
            

            【讨论】:

            • 注意get_info被调用了,不管self.get_data('text1', bsObj)的值是多少,在原始代码中,它没有
            • 是的,我知道这一点。不过,效率与每次调用get_number() 时是否经常调用self.get_info() 相关。我们不知道答案。
            最近更新 更多