【问题标题】:Don't understand if/else behavior within for loop不理解 for 循环中的 if/else 行为
【发布时间】:2015-06-26 12:34:00
【问题描述】:

所以我有一个对象,它的方法应该遍历类中定义的列表。

当我使用一个简单的 if 语句时,我得到了预期的结果,但是,当我添加一个 else 语句时,我得到了奇怪的结果。

Class SomeClass(object):
     def __init__(self):
          self.config = ['something', 'this exists', 'some more stuff']

     def check_this(self):
          for line in self.config:
               if "this exists" in line:
                    return True

只要我到达列表中的第二个元素,上面的代码就会返回 True。

如果我将代码更改为以下内容。该方法返回 False。

Class SomeClass(object):
     def __init__(self):
          self.config = ['something', 'this exists', 'some more stuff']

     def check_this(self):
          for line in self.config:
               if "this exists" in line:
                    return True
               else:
                    return False

我必须在这里遗漏一些东西。 MAC OS X 上的 Python 2.7.6

【问题讨论】:

  • 总是在循环的第一次迭代中返回。您返回TrueFalse,基于第一行solely。考虑一下,然后尝试考虑何时应该执行 return False

标签: python oop object if-statement for-loop


【解决方案1】:

在后一种情况下,您永远不会碰到第二个元素,因为第一个返回 False。一个函数只能return一次。

在您的第一种方法中,它唯一会返回的时间是它进入您的if 块并返回True。如果它永远不会进入if 块,它将返回None

在您的第二种方法中,在第一次迭代中,'this exists' 不在 line 中,因此它返回 False 并停止迭代。

如果我理解该功能的意图,它可能只是

def check_this(self):
    return "this exists" in self.config

【讨论】:

  • 啊!太明显了!谢谢科里。我现在觉得很傻。应该看到的。
【解决方案2】:

我想这就是你想要的:

 Class SomeClass(object):
      def __init__(self):
           self.config = ['something', 'this exists', 'some more stuff']

      def check_this(self):
          if "this exists" in self.config:
              return True
          else:
              return False

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 2019-12-04
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2022-01-10
    • 2012-11-13
    相关资源
    最近更新 更多