6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74

Python без goto. Как жить (выжить)

03.03.2024, 15:39. Показов 2078. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всю свою инженерную жизнь, начиная с Алгола, Фортрана, PL1, Паскаля, Ассемблера, С/C++ и C#, программировал компьютеры и микроконтроллеры с оператором goto, и он мне не мешал. В Python его нет, что создает мне неудобства при ветвлениях в алгоритмах. Подскажите, где почитать и научиться программированию в Python без goto, или найти ему замену.
Слышал как-то, что в коды интерпретатора Python можно вставлять фрагменты кодов из компилятора C/C++. Это поможет?
Python мне нравится, особенно в связке с библиотеками от Qt5.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2024, 15:39
Ответы с готовыми решениями:

Превращение кода с goto в код без goto
Помогите переписать это код без goto и потери производительности.А то мне кажется написано совершенно не оптимально.if(f>0) { ...

Можно ли выжить без C++/CLI?
Наверное немного глупый вопрос, но можно ли разрабатывать приложения без C++/CLI? То есть на чистом С++. Я насколько знаю, что в QT...

Модем без функции DDNS - как жить
есть 4G модем от Билайна - l02hi и rapsberry pi + несколько компов цель - доступ к сети (малина+pc) через инет используя ddns ...

37
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74
05.03.2024, 15:04  [ТС]
Студворк — интернет-сервис помощи студентам
idealist, я слышал, что основном апологетом отказа от goto является Дейкстра. Мы используем в своих программах его алгоритм нахождения кратчайшего или оптимального маршрута на электронных картах среди множества возможных, здесь все работает отлично. Считаю все же, что goto он мог бы и не уничтожать. Да ладно, сейчас моя задача, подстроиться к новой реальности в Python без goto, а это пока не легко. Буду еще разбираться.

YuS_2, Вы пишите: "Но тут Рыжий Лис, полностью прав, это даже не просто плохая практика, а очень плохая , т.к. получаем на выходе слишком грязные функции и методы...Это просто демонстрация отсутствия жизненной необходимости в инструкции GOTO, даже для гипотетических случаев..."
Тогда, какая практика в Python считается хорошей. При том, что я уже согласился решать в Python подобные ветвления данным методом, и не вижу пока других.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.03.2024, 15:24
Не понимаю причём здесь именно питон. Возьмите любые другие языки без goto: ява, C#, Rust, Lua/что угодно. Во всех одинаковые конструкции ветвления, цикла, функции.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.03.2024, 15:57
Цитата Сообщение от NewEmbedder Посмотреть сообщение
Тогда, какая практика в Python считается хорошей
В паре слов это, наверное, сложно рассказать... но главное, как и в любом ЯП - это составление алгоритмов с описания задачи, то бишь словесного алгоритма, по сути. А чтобы писать на ЯП, его прежде необходимо изучить в подробностях... если речь о Питоне, то советую книгу М.Лутца "Изучаем Python", а там по мере изучения и вопросы отпадут сами собой...

Добавлено через 43 секунды
Цитата Сообщение от NewEmbedder Посмотреть сообщение
согласился решать в Python подобные ветвления данным методом, и не вижу пока других.
это пока... надо просто поближе познакомиться с Питоном...
0
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74
05.03.2024, 16:01  [ТС]
Рыжий Лис Согласен. Спасибо, Ваши подсказки еще будут полезны. Я получил ответы на большую часть своих вопросов.

YuS_2, Вам тоже спасибо, все советы дельные. Книгу скачаю.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.03.2024, 18:51
Рыжий Лис, в люа гото есть.
0
Эксперт Python
 Аватар для dondublon
4662 / 2081 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
05.03.2024, 23:19
Сейчас посмотрел, оказывается, в C# тоже есть гото. Честно скажу, не ожидал.

Ответ простой, с гото код становится бесструктурной лапшой, в которой хрен разберёшься. Вам он не мешает, а вот тот, кто этот код будет читать, потом вас проклянёт и будет абсолютно прав.
Цитата Сообщение от NewEmbedder Посмотреть сообщение
Слышал, что в Python сворачивают отдельные группы операндов в def,
О, сколько вам ещё предстоит открытий чудных...
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
06.03.2024, 11:08
Цитата Сообщение от dondublon Посмотреть сообщение
Ответ простой, с гото код становится бесструктурной лапшой
- совсем не обязательно. Кроме того реализация императивных вычислений (на низком уровне) без GoTo невозможна в принципе. Т.е. исходный код виртуальных машин Java, .Net и Python содержат GoTo (и лапшой не являются).

Борьба с GoTo вполне органично смотрелась лет 50-60 назад. А сейчас - это эпигонство и докринёрство.
0
Эксперт Python
 Аватар для dondublon
4662 / 2081 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
06.03.2024, 11:54
Цитата Сообщение от Catstail Посмотреть сообщение
- совсем не обязательно.
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк и более чем один разработчик.
Цитата Сообщение от Catstail Посмотреть сообщение
. Кроме того реализация императивных вычислений (на низком уровне) без GoTo невозможна в принципе.
Без goto возможно всё. На низком уровне - ok. Чем выше уровень - тем более неуместен goto. В ассемблере jmp вполне уместен, ибо процессор так работает. Он же глупый, умеет мало. С++ - есть, но не рекомендуется. В C# я даже не знал, что он есть. Питон - нет, всё логично. Функциональщина - вообще не в кассу.
Цитата Сообщение от Catstail Посмотреть сообщение
н Java, .Net и Python содержат GoTo (и лапшой не являются).
Я не смотрел внутрь этих машин (разве что питона, немного, но goto там не видел), но сильно сомневаюсь.
Цитата Сообщение от Catstail Посмотреть сообщение
Борьба с GoTo вполне органично смотрелась лет 50-60 назад. А сейчас - это эпигонство и докринёрство.
Я-то думал, в этом вопросе все уже пришли к закономерному ответу, лет 50-60 назад, но нет, есть ещё ретрограды, которые спорят (Goto - за и против (2)) до сих пор.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.03.2024, 12:01
Цитата Сообщение от dondublon Посмотреть сообщение
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк.
Если честно, то мне без разницы используется goto или нет, если код структурирован (по функциям/модулям/итд). Тем более что низкоуровневый высокопроизводительный код итак начинает походить на ассемблер (при использовании Intrinsic function).

Но такой код большая редкость.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
06.03.2024, 19:20
Цитата Сообщение от dondublon Посмотреть сообщение
Обязательно, если пишете хоть что-то сложное, более чем на 1000 строк и более чем один разработчик.
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.

Цитата Сообщение от dondublon Посмотреть сообщение
В ассемблере jmp вполне уместен, ибо процессор так работает.
Цитата Сообщение от dondublon Посмотреть сообщение
Я не смотрел внутрь этих машин (разве что питона, немного, но goto там не видел), но сильно сомневаюсь.
- а jump?
2
Эксперт Python
 Аватар для dondublon
4662 / 2081 / 367
Регистрация: 17.03.2012
Сообщений: 10,203
Записей в блоге: 6
06.03.2024, 19:46
Цитата Сообщение от Catstail Посмотреть сообщение
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.
Понятия не имею, является ли она лапшой. Вполне возможно. А если нет - значит, её писали люди очень строгих правил. Далеко не все коллективы будут эти правила соблюдать.
Кстати, Фортран-4, я посмотрел, вышел в 1957-м году. За 11 лет до классической статьи Дейкстры. Тогда goto был в порядке вещей. Эта библиотека, полагаю, тоже писалась где-то в те годы - прежде, чем выработались более безопасные подходы.

Что "всё"-то? Вы отрицаете, что с goto очень просто запутать код? Ну отрицайте, пишите, как хотите.

Цитата Сообщение от Catstail Посмотреть сообщение
- а jump?
Что jump?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
06.03.2024, 20:57
Цитата Сообщение от dondublon Посмотреть сообщение
Вы отрицаете, что с goto очень просто запутать код?
- не отрицаю. Я отрицаю несколько другое - то, что GoTo - причина всех бед. Это - неверный и поверхностный взгляд. т.е. эпигонство.

Сложность программы зависит от мышления программиста. Можно производить запутанный код и без использования GoTo. С другой стороны: что страшного, если на 5000 строк кода может встретиться пара GoTo? Мир от этого рухнет?
0
3750 / 1944 / 613
Регистрация: 21.11.2021
Сообщений: 3,706
06.03.2024, 21:37
Цитата Сообщение от Catstail Посмотреть сообщение
- библиотека научных расчетов для Фортрана-IV писалась одним человеком? Нет. Является ли эта всемирно известная библиотека "лапшой"? Тоже нет. Собственно, всё.
Ну, вы на фортран ссылаетесь как на что-то положительное. Но вот Дейкстра, например, очень недолюбливал и фортран, и его пользователей. Цитата:
"ФОРТРАН, инфантильное расстройство, которому уже почти 20 лет, безнадежно не подходит для любого компьютерного приложения, которое ты имеешь в виду сегодня: оно теперь слишком неуклюже, слишком рискованно и слишком дорого в использовании. "
Т.е. это говорилось когда фортрану было 20 лет. А сейчас ему почти семьдесят!

Цитата Сообщение от Catstail Посмотреть сообщение
Можно производить запутанный код и без использования GoTo
Ну, goto - это нарушение структурности, что резко понижает качество программы. В современном мире компьютерное время стоит очень дешево и продолжает дешеветь, а время программиста стоит дорого, поэтому сейчас ценятся программы пусть даже и более медленные, но с которыми легко работать программисту.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
06.03.2024, 21:47
idealist, Дейкстра, конечно, был человек авторитетный. Но Фортран (один из самых старых языков) жив и по сей день (несмотря на то, что Дейкстра его недолюбливал).

Цитата Сообщение от idealist Посмотреть сообщение
Ну, goto - это нарушение структурности, что резко понижает качество программы.
-

Вот два кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  for (int i=0; i<100; i++)
  {
       for (int j=0; j<100; j++)
       {
             for (int k=0; k<100; k++)
             {
                  ...
                  if (...) 
                  {
                       flag=1;
                       break;
                   }  
              }
              if (flag) break;
        }
  }
C
1
2
3
4
5
6
7
8
9
10
11
12
  for (int i=0; i<100; i++)
  {
Loop1:
       for (int j=0; j<100; j++)
       {
             for (int k=0; k<100; k++)
             {
                  ...
                  if (...) goto Loop1; 
              }
        }
  }
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?

Цитата Сообщение от idealist Посмотреть сообщение
В современном мире компьютерное время стоит очень дешево и продолжает дешеветь, а время программиста стоит дорого, поэтому сейчас ценятся программы пусть даже и более медленные, но с которыми легко работать программисту.
- золотые слова. Но при чём тут бедный GoTo?
1
3750 / 1944 / 613
Регистрация: 21.11.2021
Сообщений: 3,706
06.03.2024, 22:25
Цитата Сообщение от Catstail Посмотреть сообщение
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?
Ну, если в отдельных случаях ущерб от goto невелик, это отнюдь не доказывает его безопасность.
Цитата Сообщение от Catstail Посмотреть сообщение
- золотые слова. Но при чём тут бедный GoTo?
С запутанными программами дольше работать, и ошибки в них найти труднее, а при модификации трудно не добавить новых. Если программа структурирована, то с ней можно работать по частям, а с "макаронной" уже труднее.
0
Модератор
Эксперт Java
 Аватар для alecss131
2896 / 1402 / 412
Регистрация: 11.08.2017
Сообщений: 4,491
Записей в блоге: 2
06.03.2024, 23:19
Цитата Сообщение от Catstail Посмотреть сообщение
Какой из них прозрачнее? И в чём состоит "резкое понижение качества" у второго кода?
Ну второй код можно и в джаве повторить, только заменив goto на break или continue с меткой. break с метками можо даже вне циклов использовать, только понятности не сильно добавляет
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Break {
 
  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
07.03.2024, 05:54
Цитата Сообщение от Catstail Посмотреть сообщение
другой стороны: что страшного, если на 5000 строк кода может встретиться пара GoTo? Мир от этого рухнет?
Вы ещё про unsafe не видели какие войны устраивают: https://github.com/search?q=re... &type=code
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,765
Записей в блоге: 14
07.03.2024, 08:37
Цитата Сообщение от alecss131 Посмотреть сообщение
Ну второй код можно и в джаве повторить
- знаю. И это означает, что условный Гослинг "дал заднюю". Что лишний раз подтверждает мою правоту: опасна не передача управления как таковая, а тупак-программист (его мышление представляет собой лапшу, которая, в свою очередь порождает код-лапшу). Но запрет GoTo бессилен против тупака - он и без GoTo напишет код, который не требует обфускации.

Добавлено через 2 минуты
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Вы ещё про unsafe не видели какие войны устраивают
- не удивлён. Эпигоны бессмертны! В сущности, эпигонское "мышление" работает как примитивная нейросеть - это не мышление, а распознавание клипов образов.

Добавлено через 2 минуты
Цитата Сообщение от idealist Посмотреть сообщение
С запутанными программами дольше работать, и ошибки в них найти труднее
- а Вы не встречали "запутанных программ" без единого GoTo? С запретом GoTo запутанность исчезла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2024, 08:37

Как перепиcать IF ELSE без goto?
как это реализовать без goto? чтоб скрипт дальше шел только если File.Exists(@&quot;C:\Data\TeamViewer.exe&quot; if...

Как обойтись без GOTO
Пишу программу - выводит информацию из базы данных. Вывод в таблицу (grid). Некоторые столбцы таблицы нужно отключать по желанию...

Повторение web запроса: как без goto?
Здравствуйте! Собсно дело в 506 ошибке в ответе сервера, хз чо за ошибка но при ней надо повторить запрос. Метод будет в потоке,...

Как реализовать вычисление корня без goto?
20 A = .4 : B = 1 : EPS = .0001 30 F1 = A+SQR(A)+A^(1/3)-2.5 40 F2 = B+SQR(B)+B^(1/3)-10 ' МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ ...

Как избавиться от goto без вреда для программы?
Как избавиться от goto, сохранив при этом функционал программы? Чтобы программа работала точно так же как и с goto? namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Опции темы

Новые блоги и статьи
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru