return True在Python中停止循环?

时间:2013-11-16 03:23:24

标签: python loops for-loop return

我还是初学者,但不知道为什么“for循环”中的“return True”会在第一次传递后停止循环。如果我使用的不是“返回”,那么一切都很好。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

如果要突破循环,则需要使用break语句。

例如,

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

print tempFunc1()

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

答案 2 :(得分:0)

如果你想返回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