Finnes det en goto
eller tilsvarende i Python for å kunne hoppe til en bestemt kodelinje?
Python gir deg muligheten til å gjøre noen av de tingene du kan gjøre med et goto ved hjelp av førsteklasses funksjoner. For eksempel
void somefunc(int a)
{
if (a == 1)
goto label1;
if (a == 2)
goto label2;
label1:
...
label2:
...
}
Kan gjøres slik i Python:
def func1():
...
def func2():
...
funcmap = {1 : func1, 2 : func2}
def somefunc(a):
funcmap[a]() #Ugly! But it works.
Det er riktignok ikke den beste måten å erstatte goto på. Men uten å vite nøyaktig hva du prøver å gjøre med goto, er det vanskelig å gi konkrete råd.
@ascobol:
Det beste du kan gjøre er å enten legge det inn i en funksjon eller bruke et unntak. For funksjonen:
def loopfunc():
while 1:
while 1:
if condition:
return
For unntaket:
try:
while 1:
while 1:
raise BreakoutException #Not a real exception, invent your own
except BreakoutException:
pass
Å bruke unntak til å gjøre ting som dette kan føles litt vanskelig hvis du kommer fra et annet programmeringsspråk. Men jeg vil påstå at hvis du misliker å bruke unntak, er ikke Python språket for deg :-).
For å svare på @ascobol
's spørsmål ved hjelp av @bobince
's forslag fra kommentarfeltet:
for i in range(5000):
for j in range(3000):
if should_terminate_the_loop:
break
else:
continue # no break encountered
break
Innrykket for else
-blokken er korrekt. Koden bruker den obskure Python-syntaksen else
etter en løkke. Se Why does python use 'else' after for and while loops?