
抱歉,我不会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 用 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 |