Python'da bir etiket/goto var mı?

Python'da belirli bir kod satırına atlayabilmek için bir goto veya eşdeğeri var mı?

Hayır, Python etiketleri ve goto'yu desteklemez, eğer peşinde olduğunuz şey buysa. Bu (oldukça) yapılandırılmış bir programlama dilidir.

Yorumlar (3)

Python size birinci sınıf fonksiyonları kullanarak bir goto ile yapabileceğiniz bazı şeyleri yapma olanağı sunar. Örneğin:

void somefunc(int a)
{
    if (a == 1)
        goto label1;
    if (a == 2)
        goto label2;

    label1:
        ...
    label2:
        ...
}

Python'da şu şekilde yapılabilir:

def func1():
    ...

def func2():
    ...

funcmap = {1 : func1, 2 : func2}

def somefunc(a):
    funcmap[a]()  #Ugly!  But it works.

Kabul etmek gerekir ki, bu goto'nun yerine geçmenin en iyi yolu değildir. Ancak goto ile tam olarak ne yapmaya çalıştığınızı bilmeden, spesifik bir tavsiye vermek zordur.

@ascobol:

Yapabileceğiniz en iyi şey, bunu bir fonksiyon içine almak veya bir istisna kullanmaktır. Fonksiyon için:

def loopfunc():
    while 1:
        while 1:
            if condition:
                return

İstisna için:

try:
    while 1:
        while 1:
            raise BreakoutException #Not a real exception, invent your own
except BreakoutException:
    pass

Başka bir programlama dilinden geliyorsanız, bu gibi şeyleri yapmak için istisnaları kullanmak biraz garip gelebilir. Ancak istisnaları kullanmaktan hoşlanmıyorsanız, Python'un sizin için uygun bir dil olmadığını iddia ediyorum :-)

Yorumlar (2)

@ascobol'un sorusunu][1] yorumlardan@bobince`'nin önerisini kullanarak yanıtlamak:

for i in range(5000):
    for j in range(3000):
        if should_terminate_the_loop:
           break
    else: 
        continue # no break encountered
    break

elsebloğu için girinti doğrudur. Kod, bir döngü Python sözdiziminden sonra belirsizelse` kullanır. Bakınız Python for ve while döngülerinden sonra neden 'else' kullanır?

Yorumlar (7)