大域脱出とは
2重以上のループから一息に脱出することをいうらしい。Pythonで、いままで
import time brk = False for i in range(200): if brk: break time.sleep(0.2) print i for j in range(10): if brk: break time.sleep(0.1) print i,j for k in range(5): print i,j,k if (i,j,k) == (2,3,4): brk = True break else: print "lv3" else: print "lv2" else: print "lv1" print "lv0"
とかやってたが、スマートではないのだそうだ。
Rubyでは 大域脱出には catch and throwというのを聞いたので、Pythonではどうなるのか調べて直した。
import time class END(Exception): pass try: for i in range(200): time.sleep(0.2) print i for j in range(10): time.sleep(0.1) print i,j for k in range(5): print i,j,k if (i,j,k) == (2,3,4): raise END else: print "lv3" else: print "lv2" else: print "lv1" except END: pass print "lv0"
ここで参考にしたページは以下。
Python で for ループを回し切った後に行う処理と、深部からの脱出