Python3中goto 語句的使用及原理解析
阿新 • • 發佈:2018-11-19
【時間】2018.11.03
【題目】Python3中goto 語句的使用及原理解析
概述
本文轉載自https://blog.csdn.net/yilovexing/article/details/81092388,在此基礎上增加了原理的一點說明。
熟悉 C 語言的小夥伴一定對 goto 語句不陌生,它可以在程式碼之間隨意的跳來跳去,但是好多老鳥都告誡大家,不要使用 goto,因為 goto 會使你的程式碼邏輯變的極其混亂。但是有時候我們不得不用它,因為它太高效了。比如進入迴圈內部深層一個 goto 就能回到最上層,還有可以定位到程式碼的任意一個位置,很是高效方便。但是也不要所有的程式碼都用 goto,那樣你的程式碼就變得像量子世界那樣詭異,連你自己都控制不了。最後一句忠告,能不用 goto 最好就不用。
一、具體用法
首先安裝一個 goto 的包(因為官方是沒有 goto 語句的)
pip install goto-statement
具體的語法--注意: 對需要使用goto的函式,前面加個@patch
from goto import with_goto @with_goto def range(start, stop): i = start result = [] label .begin if i == stop: goto .end result.append(i) i += 1 goto .begin label .end return result
二、原理解析
原理是這樣:通過給所有函式修改trace,然後在異常時就會執行設定的函式。
sys.settrace(_trace)
frame = sys._getframe().f_back
while frame:
frame.f_trace = _trace
frame = frame.f_back
github goto pack:https://github.com/snoack/python-goto