Python中有標(biāo)簽/ goto嗎?gotoPython中是否有一個或任何等價物能夠跳轉(zhuǎn)到特定的代碼行?
3 回答
慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗 獲得超8個贊
不,Python不支持標(biāo)簽和goto,如果這是您所追求的。它是一種(高度)結(jié)構(gòu)化的編程語言。
BIG陽
TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
Python為您提供了使用第一類函數(shù)執(zhí)行g(shù)oto所能完成的一些功能。例如:
void somefunc(int a){
if (a == 1)
goto label1;
if (a == 2)
goto label2;
label1:
...
label2:
...}可以像這樣在python中完成:
def func1():
...def func2():
...funcmap = {1 : func1, 2 : func2}def somefunc(a):
funcmap[a]() #Ugly! But it works.當(dāng)然,這不是替代goto的最佳方式。但是如果不確切地知道你要對goto做什么,很難給出具體的建議。
@ ascobol:
最好的辦法是將其包含在函數(shù)中或使用異常。對于功能:
def loopfunc(): while 1: while 1: if condition: return
對于例外:
try: while 1: while 1: raise BreakoutException #Not a real exception, invent your ownexcept BreakoutException: pass
如果你來自另一種編程語言,使用異常來做這樣的事情可能會有點尷尬。但我認(rèn)為,如果您不喜歡使用異常,Python就不適合您。:-)
皈依舞
TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊
我最近寫了一個函數(shù)裝飾器,goto在Python 中啟用,就像這樣:
from goto import with_goto@with_gotodef range(start, stop): i = start result = [] label .begin if i == stop: goto .end result.append(i) i += 1 goto .begin label .end return result
我不確定為什么人們會這樣做。那就是說,我對此并不太認(rèn)真。但是我想指出這種元編程在Python中是可行的,至少在CPython和PyPy中是這樣,而且不僅像其他人那樣濫用調(diào)試器API 。你必須弄亂字節(jié)碼。
添加回答
舉報
0/150
提交
取消
