LINUX.ORG.RU

python goto

 


0

2

Есть ли в питон аналог goto? Что бы скажем делать нечто подобное

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

    label1:
        ...
    label2:
        ...
} 

Нет. Используй функции для определения блоков кода.

def bar():
    pass

def bazz():
    pass

def  foo(a):
    if a  == 1:
        return bar()
    if a == 2:
        return bazz()

Virtuos86 ★★★★★
()

Есть ли в питон аналог goto?

нет, розовая няшка.

Что бы скажем делать нечто подобное

этого делать не нужно, бро.

emulek
()

В питоне нет GOTO или подобного. Вообще так делать не стоит, если не уверен, что здесь нужно именно GOTO и без него ну никак не обойтись. И да, реквестирую юзкейс данной конструкции в питоне.

hippi90 ★★★★★
()
Ответ на: комментарий от srst

Более того, убогие вещи вообще могут нормально работать :3

anonymous
()
Ответ на: комментарий от Virtuos86

первым двум соответствуют питоновские break и continue

Странно, мне казалось, что их нет.

srst
()
Ответ на: комментарий от srst

там есть итераторы. можно расширить всем, что вам только взбредет в голову.

foreigner_web
()
Ответ на: комментарий от Virtuos86

Псевдокод.

# этот вариант не напечатает ничего
while true:
  break
  print "hello world"

# этот выриант напечатает «hello world»
while true:
  last
  print "hello world"
theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)
Ответ на: комментарий от theNamelessOne

Этот выриант напечатает «hello world»

Нет:

perl -e 'while (true) {last; print "hello world"}'

srst
()
Ответ на: комментарий от theNamelessOne

Они оба даже не запустятся. Это не значит, что это не код на питоне. Просто это код с ошибкой. Так же и про эти операторы. Если использовать их правильно, то код будет выглядеть одинаково и действовать будет одинаково.

winlook38 ★★
()
Ответ на: комментарий от aedeph_

Ты говоришь так, будто псевдокод нельзя переписать в виде нормального кода.

srst
()
Ответ на: комментарий от srst

Оператор last осуществляет немедленный выход из соответствующего цикла

В чем отличие от break?

Для управления циклами, например. Ведь в Python'е нет аналогов перловским last, next и redo.

Из всего перечня нет только redo. А какие у него есть юзкейсы?

CaveRat ★★
()
Ответ на: комментарий от anonymous

Не нужен, его легко заменить на словарь, в качестве значений можно функции подставлять.

BattleCoder ★★★★★
()

[пони на аватаре]
Интересно, а парсер кавычек тоже с goto написан?

J ★★★★★
()

продолжаем костылять

try:
    if a == 1:
        throw ErrorOne()
    elif a == 2:
        throw ErrorTwo()
    # other code
except ErrorOne:
    print('1')
except ErrorTwo:
    print('2')
x0r ★★★★★
()
Ответ на: нет, ты от int13h

Существительное «линукс» склоняется, недоумок ты грязный.

anonymous
()
Ответ на: нет, ты от int13h

А за goto ты ответить зассало, жалкое школоло?

anonymous
()
Ответ на: комментарий от CaveRat

В чем отличие от break?

В Perl нет break. А от сишного break перловый last ничем не отличается, в том-то и дело.

anonymous
()
Ответ на: комментарий от anonymous

В Perl нет break. А от сишного break перловый last ничем не отличается, в том-то и дело.

В перле есть last, а в питоне - break. Вопрос был в том, что одно от другого отличается?

CaveRat ★★
()
Ответ на: комментарий от int13h

еще в 60-х доказали, что гото не нужен и вреден.

Вот мудаки. Нет слов

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.