[python] где мой goto?
учись тосковать по ассемблеру
учись тосковать по ассемблерузачем мне ассемблер для goto, когда есть common lisp для этих целей?
Наслаждайсявау, спасибо. Таки
Ну как нативно, там декоратор, модифицирующий байт-код функции. Такими хаками можно много что сделать, user-defined операторы например, геморно только
модифицирующий байт-код функции.ну как я понял goto (jump) в байт-коде присутствует нативно. Просто его нельзя напрямую из языка вызывать. А декоратор всего лишь служит толмачом
Но как-то черезжопно даже для питон-стайл
Не знаю насколько это применимо к питону, но в яве например goto формально тоже нет, но на самом деле есть. goto вниз это break на метку, а goto вверх это continue на метку. Правда метку можно поставить только на скоуп, а break/continue должны находиться внутри того скоупа, на метку которого ссылаются. Так что расположить синтаксически правильно начала и концы скоупов в некоторых случаях та еще задачка, но есть доказательство, что это всегда возможно.
Не знаю насколько это применимо к питону, но в яве например goto формально тоже нет, но на самом деле есть. goto вниз это break на метку, а goto вверх это continue на метку.нинасколько не применимо. Это замечательный механизм и полностью отвечает всем моим представлениям о возможных корректных способах использования goto. Только он выглядит ещё сложнее, чем goto, хотя и удобнее. Так вот, гвидо такое же предложение отверг, со словами "это же слишком сложно для питон-стайл, юзайте исключения, вот"
Почему в питоне нет goto? Ведь для скриптовых динамических языков такие прыжки натуральны. А так неудобно выходить из вложенных циклов без него. Питоновцы вон рекомендуют исключения бросать. Но как-то черезжопно даже для питон-стайлПора наверно завязывать с тяжелыми наркотиками. Питон он вообще не о том.
Последний раз я писал прогу, в которой был goto года полтора назад и это был код на си с низкоуровневыми оптимизациями.
Так для этого кода я написал столько же строк комментария, чтобы себе в будущем объяснить, что за черная магия тут творится.
Зачем это все в питоне? Да, интерпретатор может сходить на любую команду байткода и с текущим окружением ее выполнить, но зачем? Ну приведите мне хоть один пример когда это реально нужно (кроме вырожденных случаев и преждевременной оптимизации)
ну может ему хочется что-то вроде break(n) для того, чтобы одним махом выйти из n вложенных циклов
ну может ему хочется что-то вроде break(n) для того, чтобы одним махом выйти из n вложенных цикловименно. Простые переборные задачи на 30 строк кода. И отсутствие в питоновском цикле for возможности задать флаг окончания. Приходится этот флаг задавать как переменную и вписывать проверку в каждый родительский цикл с breakом местного значения. Питон для меня основной инструмент командно-строчной автоматизации, используется для всех скриптов, где есть больше одного оператора управления командным потоком, иначе баш
Приходится этот флаг задавать как переменную и вписывать проверку в каждый родительский цикл с breakом местного значения.ну таки эксепшены не проще, да?
они же ебически медленные, не?
ну таки эксепшены не проще, да?не для меня. Код начинает выглядеть ещё более непонятно. Количество вложений (и отступов) увеличивается вдвое. Ну и где-то я слышал, что эксепшны нужны для исключений, а не для правил.
Можно было бы монаду заюзать, но питон не функционален
http://stackoverflow.com/questions/653509/breaking-out-of-ne... немного рассуждений на тему
Впервые узнал о конструкции for...else!
http://stackoverflow.com/questions/653509/breaking-out-of-ne... немного рассуждений на темуименно оттуда я и узнал, что break(n) никогда в питоне не будет. что заставило озаботиться вопросом более простого goto. Оказалось, что goto в питоне добывается достаточно просто
они же ебически медленные, не?Не в Python.
Наверное для тебя станет открытием, как работает обычный for в Python. Вкратце, конструкция:
for i in iterable:
do_something
интерпретируется как:
it = iter(iterable)
while True:
try:
i = it.next
except StopIteration:
break
do_something
Т.е. условием завершения цикла for является выбрасывание исключения типа StopIteration при вызове next у итератора.
Не в Python.Наверное правильнее будет сказать, что в питоне просто все остальное тоже ебически медленное
Боже!
да, стало сюрпризом. Спасибо
Наверное для тебя станет открытием, как работает обычный for в Python. Вкратце, конструкция:это работает и в фейсбуковском питоне?
фейсбуковском питонеЧто это?
тфу, меня замкнуло. Игнорируйте вопрос плиз
Оставить комментарий
yroslavasako
Почему в питоне нет goto? Ведь для скриптовых динамических языков такие прыжки натуральны. А так неудобно выходить из вложенных циклов без него. Питоновцы вон рекомендуют исключения бросать. Но как-то черезжопно даже для питон-стайл