1. 程式人生 > >Python3中goto 語句的使用及原理解析

Python3中goto 語句的使用及原理解析

【時間】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