抱歉,我不会markdown,刚看看!抱歉!
isbreak=False
for i in ['a','b','c']:
for ii in range(5):
print i,ii
if ii==2:
print 'ii=2时,内层循环break,同时外层循环break'
isbreak=True
break
if isbreak:
isbreak=False
break
如上代码,当内层循环break时,外层循环也break. 请问,还有其他写法,可以实现这样的功能吗? 多谢您的回复!
1
stamaimer 2016-10-18 12:07:59 +08:00 via iPhone
缩进
|
2
upczww 2016-10-18 13:09:56 +08:00
注意缩进啊,这样别人没法看。
|
3
ipwx 2016-10-18 13:47:58 +08:00
try: .... except SomeException: pass
|
4
SuperMild 2016-10-18 13:50:51 +08:00
写成函数,直接 return
|
5
lxy 2016-10-18 14:16:23 +08:00
除了上面所说的封装函数 return 之外,还有一种貌似不被一些人接受的方法,就是利用 for...else 结构,同时省去一个 isbreak 变量:
for i in ['a','b','c']: for ii in range(5): print i,ii if ii == 2: print 'ii=2 时,内层循环 break,同时外层循环 break' break else: continue break |
6
lxy 2016-10-18 14:18:05 +08:00
|
7
Contextualist 2016-10-18 14:30:06 +08:00 via iPad 3
用 itertools 里的 product 来合并多层循环:
>>> from itertools import product >>> for i,ii in product(['a','b','c'], range(5)): . . . . . . . .print i,ii . . . . . . . .if ii==2: . . . . . . . . . . . .break |
8
ipconfiger 2016-10-18 14:35:20 +08:00
循环超过两层就该想办法优化代码结构了, 要尽量打破多层次的循环
|
9
haihan 2016-10-18 15:09:20 +08:00
利用 while 代替 for 即可。
|
10
Allianzcortex 2016-10-18 16:08:25 +08:00
for-else
|
11
ShiHou 2016-10-18 16:12:31 +08:00
1. 用语法糖减少锁进
2. 状态机代替条件判断 |
12
wind3110991 2016-10-18 16:29:28 +08:00
这个场景,最简单的方法:像楼上说的,要不就用 while 代替 for ,省去用 isbreak 进行复杂的逻辑判断;要不就封装成函数,直接内层 return ,简单明了,两个 for 以上场景的代码有很大优化的空间,可以考虑下用一些类似 yield 或者 while-loop 移除装饰器
|
13
Yinz 2016-10-18 17:54:41 +08:00
自定义一个 Exception 需要跳出的时候 raise BreakException, 外层 except 即可
|
14
dsg001 2016-10-18 20:15:54 +08:00
```python
def gen(): for i in ['a','b','c','d','e']: for ii in range(5): yield i, ii for i,ii in gen(): if ii==2: break ``` 目前这种思路 |
15
vtoexsir OP @Contextualist
这种写法似乎更简单! |
16
wgjak47 2016-10-18 21:20:58 +08:00 via Android
是不是把代码抽出来,变成函数, break 都改成 return ?
|
17
kgf0ry 2016-10-19 01:15:18 +08:00 via Android 1
|