matlab退出循环中return和break有什么差别?
matlab退出循环中return和break有什么差别? return 退出整个函数体break退出循环体 谢谢
回复 沙发 yangzj 的帖子
如果两个for循环嵌套,是退出里层的吗?回复 地板 ldlnihao 的帖子
YesFrom Help
break terminates the execution of a for or while loop. Statements in the loop that appear after the break statement are not executed.
In nested loops, break exits only from the loop in which it occurs. Control passes to the statement that follows the end of that loop. return:从M函数回去
break:退出包含break最里层循环
continue:退出循环的本轮计算,之后执行下一轮循环 对于嵌套两个for嵌套循环,怎么退出外层循环 笨笨、石头 发表于 2011-1-17 09:11 static/image/common/back.gif
对于嵌套两个for嵌套循环,怎么退出外层循环
在第一个循环体外,外层循环体内加break 回复 7 # 笨笨、石头 的帖子
多层循环之间跳的话,可以用try……catch 回复 9 # qibbxxt 的帖子
异常处理不是不建议用于流程控制么…… 回复 10 # Rainyboy 的帖子
那除了break和try,还有什么办法可以解决多层循环之间的跳跃吗? 回复 11 # qibbxxt 的帖子
通过异常的话,大概是这样的:# -*- coding: cp936 -*-
class JumpException(Exception):
"""为转跳过程定义的异常"""
def __init__(Self,tag):
Exception.__init__(Self);
Self.Tag = tag;
def main():
for i in range(1,10):
try:
for j in range(i,10):
for k in range(j,10):
for l in range(k,10):
for m in range(l,10):
try:
for n in range(m,10):
if n == 1:
#在某些情况下只跳出一层
raise JumpException('m');
elif n == m:
#在某些情况下跳出多层
raise JumpException('i');
except JumpException, e:
if e.Tag == 'm':
print 'm=',m
else:
raise e;
except JumpException, e:
if e.Tag == 'i':
print 'i=', i;
else:
print e;
if __name__ == '__main__':
main();
也可以通过中间变量来达到:
def main():
status = '0';
for i in range(1,10):
for j in range(i,10):
for k in range(j,10):
for l in range(k,10):
for m in range(l,10):
for n in range(m,10):
if n == 1:
#在某些情况下只跳出一层
status = 'm';
break;
elif n == m:
#在某些情况下跳出多层
status = 'i';
break;
if status == 'm':
print "m =",m;
elif status == '0':
continue;
else:
break;
if status == 'l':
print "l =",l;
elif status == '0':
continue;
else:
break;
if status == 'k':
print "k =",k;
elif status == '0':
continue;
else:
break;
if status == 'j':
print "j =",j;
elif status == '0':
continue;
else:
break;
if status == 'i':
print "i =",i;
elif status == '0':
continue;
else:
break;
但是上面的代码有些冗余,因为实际上只需要在个别层之间跳转,可以将需要跳转的地方封装成函数:
def A(i):
for j in range(i,10):
for k in range(j,10):
for l in range(k,10):
for m in range(l,10):
re = B(m);
if re == 'm':
print 'm =',m;
elif re == '0':
continue;
else:
return re;
return '0';
def B(m):
for n in range(m,10):
if n == 1:
#在某些情况下只跳出一层
return 'm';
elif n == m:
#在某些情况下跳出多层
return 'i';
def main():
status = '0';
for i in range(1,10):
if A(i) == 'i':
print "i =",i;
else:
continue;
输出的结果都一样:
m = 1
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
PS:使用直接跳转也行,但是MATLAB好像没有GOTO语句
Rainyboy 发表于 2011-1-18 12:38 static/image/common/back.gif
回复 9 # qibbxxt 的帖子
异常处理不是不建议用于流程控制么……
不清楚Rainy的本意!?:@) 回复 13 # ChaChing 的帖子
哦,貌似一些程序设计的书上建议不将异常处理作为流程控制的手段(详细的原因记不清了),个人也不习惯这样用,所以就参与讨论了,呵呵。 回复 14 # Rainyboy 的帖子
有时可能不得不使用吧!:@)
页:
[1]
2