App下載

python怎么使用goto跳轉(zhuǎn)執(zhí)行到指定代碼行?

猿友 2021-08-05 16:25:45 瀏覽數(shù) (13963)
反饋

在開(kāi)發(fā)過(guò)程中我們可能會(huì)需要讓代碼跳轉(zhuǎn)到指定代碼行,在匯編和C語(yǔ)言中都可以使用goto關(guān)鍵字進(jìn)行跳轉(zhuǎn),那么python跳轉(zhuǎn)到指定代碼行要如何實(shí)現(xiàn)呢?今天我們就來(lái)聊聊python goto跳轉(zhuǎn)。

1. 緣起

在實(shí)際開(kāi)發(fā)中遇到這樣一個(gè)問(wèn)題:

以下是偽代碼

if embedding.model is not exist:
 calculate embedding   ## moudel_1
 save embedding.model
else :
 embedding = load embedding.model

try:
 use embedding
except KeyError:
 calculate embedding    ##這里與moudel_1一致。

發(fā)現(xiàn)except 中需要粘貼之前寫(xiě)過(guò)的calculate embedding

簡(jiǎn)單概括就是:

somecode_1
try:
 somecode_2
except:
 somecode_3   
 somecode_1   ## 重新執(zhí)行

2. 使用goto

(1)安裝goto

pip install goto-statement

(2)使用goto完成一個(gè)小例子

官方文檔見(jiàn):https://pypi.org/project/goto-statement/

定義函數(shù)

from goto import with_goto

@with_goto     #必須有
def test(list_): 
    tmp_list = list_
    label.begin  #標(biāo)識(shí)跳轉(zhuǎn)并開(kāi)始執(zhí)行的地方
    result = []
    try:
        for i, j in enumerate(list_):
            tmp = 1 / j
            result.append(tmp)
            last_right_i = i
    except ZeroDivisionError:
        del tmp_list[last_right_i + 1]
        goto.begin      #在有跳轉(zhuǎn)標(biāo)識(shí)的地方開(kāi)始執(zhí)行
    return result

運(yùn)行

a = test([1, 3, 4, 0, 6])
print(a)

結(jié)果

[1.0, 0.3333333333333333, 0.25, 0.16666666666666666]

注意:如果你在ide山運(yùn)行l(wèi)abel 和 goto 下有紅色波浪線提示錯(cuò)誤。不用理會(huì)直接執(zhí)行即可

補(bǔ)充:Pycharm跳轉(zhuǎn)回之前所在的代碼行

用Pycharm寫(xiě)Python代碼有一段時(shí)間了,有一個(gè)問(wèn)題一直困擾著我:瀏覽代碼的時(shí)候時(shí)常需要從一個(gè)函數(shù)跳轉(zhuǎn)到另一個(gè)函數(shù),有時(shí)候兩個(gè)函數(shù)相聚比較遠(yuǎn),我一直不知道怎么直接回到上一個(gè)函數(shù)。

于是我采取的辦法是按ctr+F然后輸入上一個(gè)函數(shù)的函數(shù)名來(lái)定位并且回到上一個(gè)函數(shù)。不忍直視~~~

下面是找到跳轉(zhuǎn)按鈕的過(guò)程:

1.找到View下面的Toolbar并勾選上

啟動(dòng)跳轉(zhuǎn)控制臺(tái)


2.按鈕出現(xiàn)

按鈕出現(xiàn)

一款對(duì)瀏覽代碼功能支持良好的IDE一般Toolbar上都有按鈕或者會(huì)有快捷鍵可以在歷史瀏覽頁(yè)面之間跳轉(zhuǎn)。而我的Pycharm的默認(rèn)設(shè)置一直是將Toolbar隱藏起來(lái)的。

以上就是python跳轉(zhuǎn)到指定代碼行的全部?jī)?nèi)容,值得一提的是,goto跳轉(zhuǎn)這種方式雖然在實(shí)現(xiàn)上沒(méi)有問(wèn)題,也不會(huì)對(duì)代碼的效率造成太多影響,但是這種方式對(duì)代碼的結(jié)構(gòu)有比較大的破壞,很影響代碼的閱讀,小編的編程老師讓我們盡量少使用這種方式的代碼,希望小伙伴在使用goto的時(shí)候有所考量,也希望大家多多支持W3Cschool。


0 人點(diǎn)贊