2 回答

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊
一、具體用法
首先安裝一個 goto 的包(因為官方是沒有 goto 語句的)
pip install goto-statement
具體的語法--注意: 對需要使用goto的函數(shù),前面加個@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
二、原理解析
原理:通過給所有函數(shù)修改trace,然后在異常時就會執(zhí)行設(shè)置的函數(shù)。
sys.settrace(_trace)
frame = sys._getframe().f_back
while frame:
frame.f_trace = _trace
frame = frame.f_back
擴(kuò)展資料:
Goto語句與結(jié)構(gòu)化程序設(shè)計
goto語句問題的提出直接推動了結(jié)構(gòu)化程序設(shè)計(structuredprogramming)的思想和程序設(shè)計方法學(xué)的誕生和發(fā)展。結(jié)構(gòu)化程序設(shè)計方法引入了工程思想和結(jié)構(gòu)化思想,使大型軟件的開發(fā)和編程都得到了極大的改善。
結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。
1.自頂向下:程序設(shè)計時,應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。不要一開始就過多追求眾多的細(xì)節(jié),先從最上層總目標(biāo)開始設(shè)計,逐步使問題具體化。
2.逐步求精:對復(fù)雜問題,應(yīng)設(shè)計一些子目標(biāo)作為過渡,逐步細(xì)化。
3.模塊化:一個復(fù)雜問題,肯定是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標(biāo)分解為子目標(biāo),再進(jìn)一步分解為具體的小目標(biāo),把每一個小目標(biāo)稱為一個模塊。
4.限制使用goto語句
結(jié)構(gòu)化程序設(shè)計方法的起源來自對goto語句的認(rèn)識和爭論。肯定的結(jié)論是,在塊和進(jìn)程的非正常出口處往往需要用goto語句,使用goto語句會使程序執(zhí)行效率較高;在合成程序目標(biāo)時,goto語句往往是有用的,如返回語句用goto。
否定的結(jié)論是,goto語句是有害的,是造成程序混亂的禍根,程序的質(zhì)量與goto語句的數(shù)量成反比,應(yīng)該在所有高級程序設(shè)計語言中取消goto語句。取消goto語句后,程序易于理解、易于排錯、容易維護(hù),容易進(jìn)行正確性證明。作為爭論的結(jié)論,1974年Knuth發(fā)表了令人信服的總結(jié),并證實了:
(1)goto語句確實有害,應(yīng)當(dāng)盡量避免;
(2)完全避免使用goto語句也并非是個明智的方法,有些地方使用goto語句,會使程序流程更清楚、效率更高。
(3)爭論的焦點不應(yīng)該放在是否取消goto語句上,而應(yīng)該放在用什么樣的程序結(jié)構(gòu)上。其中最關(guān)鍵的是,應(yīng)在以提高程序清晰性為目標(biāo)的結(jié)構(gòu)化方法中限制使用goto語句
- 2 回答
- 0 關(guān)注
- 325 瀏覽
添加回答
舉報