【时间】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