python的空else讨论

            遇到了一个空的else,我印象中c是不允许的,觉得蛮有意思。

  1 a = {}
  2 a[0] = {'m':1}
  3 a[1] = {'m':2}
  4 a[2] = {'m':3}
  5 for b in range(10):
  6         for c in a.itervalues():
  7                 print c['m']
  8                 if c['m'] >= 1:
  9                         c['m'] -= 1
 10                         break
 11              
 12         else:   
 13                 print 'hello world'

           贴一段代码,我总结的else是这样的,关键问题在break。我们常规理解这个break打破的是内层for循环,外层应该会继续执行,但是不然,因为break了,所以直接后面的都不执行了,也就是else也会观察这个break的动作,这应该跟for的返回值有关。去掉break就会发现下面的else没有用,“hello world”会被打印10次。也就是说只有上面的break不工作的时候else内部才可能工作。

           这一个特性可以增加控制流的种类,具体用途,可以用来对指定序列进行两种处理,第二种作为第一种的备用,当第一种方法失效可以用第二种,就想到这么多。

posted @ 2013-10-17 16:52  孤独的小马哥  阅读(664)  评论(0)    收藏  举报