Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
6 / 6 / 0
Регистрация: 23.03.2021
Сообщений: 74

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

03.03.2024, 15:39. Показов 2076. Ответов 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
4661 / 2080 / 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
4661 / 2080 / 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
4661 / 2080 / 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
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 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. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru