我还是初学者,但不知道为什么“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
答案 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
答案 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