【问题标题】:return True stop the loop in Python?return True 在 Python 中停止循环?
【发布时间】:2013-11-29 14:58:08
【问题描述】:

我仍然是初学者,但不知道为什么“for 循环”中的“return True”会在第一次通过后停止循环。如果我使用“return”以外的其他东西,一切都很好。

def roc_valid(self,cote_x,cote_y):
    from graph_chess import board
    p = board()
    side=(side_x,side_y)

    if side == (0,0):
        for (x,y) in (0,1),(0,2),(0,3):
            print(King.ok_to_move(self,x,y))
            if p.getPiece(x,y)=="" and king.ok_to_move(self,x,y):
                return True

【问题讨论】:

  • 我的目标不是打破循环,而是返回 True"
  • 它停止for循环,因为当遇到return语句时,函数立即返回,结束循环。
  • 从什么返回真?这就是它的作用。它使 roc_valid 返回 True。
  • 还在学习中...:) 所以我应该修改最后一个“if”以返回 False”。一旦 roc_valid 为 False,在这种情况下停止循环就可以了。谢谢。明白了
  • @user2984887 习惯上接受对您有帮助的答案。 meta.stackexchange.com/a/5235/235416请考虑勾选其中一个答案

标签: python loops for-loop return


【解决方案1】:

您可以使用yield 语句。 return 语句会停止函数并立即返回值,而 yield 语句将返回值并从离开的地方继续。

if side == (0,0):
    for (x,y) in (0,1),(0,2),(0,3):
        print(King.ok_to_move(self,x,y))
        if p.getPiece(x,y)=="" and king.ok_to_move(self,x,y):
            yield True

现在使用:list(roc_valid(self,cote_x,cote_y)) 获取所有返回值的列表,或者只使用 next(roc_valid(self,cote_x,cote_y)) 仅获取第一个值。

演示:

def func():
    for i in xrange(5):
        if i % 2: 
            yield True
...             
>>> list(func())          #all returned values
[True, True]
>>> next(func())          #Just the first returned value
True

相关:The Python yield keyword explained

【讨论】:

    【解决方案2】:

    如果你想返回 True,但仍然循环,你可能需要这样的模式。我将变量命名为 retval,但您可以将其命名为任何有意义的名称

    def roc_valid(self,cote_x,cote_y):
        from graph_chess import board
        p = board()
        side=(side_x,side_y)
        retval = False
    
        if side == (0,0):
            for (x,y) in (0,1),(0,2),(0,3):
                print(King.ok_to_move(self,x,y))
                if p.getPiece(x,y)=="" and king.ok_to_move(self,x,y):
                    retval = True
    
        return retval
    

    【讨论】:

      【解决方案3】:

      return 语句是从函数返回一个值。因此,如果您使用return,则控制权将转移到调用函数。

      如果要跳出循环,则需要使用break 语句。

      例如,

      def tempFunc1():
          i = 1
          return i
          print "leaving tempFunc1"
      
      print tempFunc1()
      

      它只打印1。它不打印leaving tempFunc1,因为函数在执行print "leaving tempFunc1" 语句之前已经返回给调用者。

      【讨论】:

      • 我的目标不是打破循环,而是返回 True"
      • @user2984887 在第一遍本身中满足条件。那么,可以退货了吧?
      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多