Python и организация перехода на метку

5065584

Да-да, не кидайтесь камнями, но мне нужна именно такая или эквивалентная возможность в Python. Как её правильнее организовать?

olega

Не, не надо так, правда-правда не надо! А вообще вот.

stm5872449

но зачем?

bleyman

> Как её правильнее организовать?
Зависит от того, зачем она тебе нужна, очевидно.
See also http://mywiki.wooledge.org/XyProblem

yroslavasako

ну лично мне она была нужна, потому что break(n) гвидо предлагает делать исключениями. И все свидетели pythonic way говорят, что break не нужен, а у самих даже фора нормального нет, с условиями. Просто потому что иногда для решения вычислительных задач хочется применить питон.

bleyman

break(n) гвидо предлагает делать исключениями.
Я бы предложил сделать его return-ом. Или генератором + any/all/next.
И все свидетели pythonic way говорят, что break не нужен, а у самих даже фора нормального нет, с условиями.
for с условиями это while, чувак. break(n) не нужен.
Просто потому что иногда для решения вычислительных задач хочется применить питон.
Я неоднократно применял питон для вычислительных задач, почему-то у меня таких желаний не возникало, особенно когда получалось нафигачить понтовый векторизованный код на нумпи. Я думаю, это потому, что твоё желание сделать break(n) тоже является примером XYproblem. Чтобы выяснить, правда ли это так, необходимо чтобы жаждущие гото таки рассказали что они хотят сделать.

yroslavasako

слушай, я прекрасно знаю, как наговнокодить аналог на while или на exception. Это просто некрасиво.

bleyman

слушай, я прекрасно знаю, как наговнокодить аналог на while или на exception. Это просто некрасиво.
То, что ты пытаешься сделать, некрасиво. Язык как бы ненавязчиво тебе на это намекает.
Пример в студию или ГТФО.

stm5872449

Ты всерьез утверждаешь, что это
 
class CrazyException(Exception):
pass

try:
while smth1:
while smth2:
if cond:
raise CrazyException
except CrazyException:
pass

лучше, чем
  
while smth1:
while smth2:
if cond:
break(2)

?
Или генератором + any/all/next.

:confused:

Dasar

с CrazyException решение устойчивее к изменениям, чем с break(2). При break(2) добавляешь еще один цикл и поведение меняется слабо предсказуемым образом.
именованный break - нормальное решение, а номерные лучше нафиг.

Dimon89

Use return, Luke
если у тебя возникает желание выходить ровно из двухх циклов, значит их можно вынести в отдельную функцию

margadon

break(n)
давайте, призывайте макаронного монстра

apl13

с CrazyException решение устойчивее к изменениям, чем с break(2).
То тебе сахара мало, ты ecxeption устойчивее, чем break. :spy:

Ivan8209

Точно так же, как и в других убогих языках: преобразованием в CPS и трамплином.
---
A44: Ламеры в гамаке пусть в тапках трахаются --- это их проблемы.
Я в своём гамаке хочу полноценно трахаться на лыжах.

Ivan8209

> Просто потому что иногда для решения вычислительных задач хочется применить питон.
Тормозов захотелось? Уж лучше яву возьми, раз в семь-восемь быстрее будет.
---
A44: Ламеры в гамаке пусть в тапках трахаются --- это их проблемы.
Я в своём гамаке хочу полноценно трахаться на лыжах.

bleyman

Ты всерьез утверждаешь, что это
Я всерьёз утверждаю что то, что ты пытаешься сделать, скорее всего неправильно, ну, раз у тебя криво получается. И ты упорно отказываешься сказать, что ты пытаешься сделать.
Кстати, это уже второй раз на этой неделе когда я говорю о питоне и эксепшенах с людьми, и у них оказывается как будто есть такая странная идея, что можно обсуждать код чисто по его синтаксическим особенностям. Типа, хороший ли это код:
def foo:
  try:
     return bar
  except:
     log_exception
     return None
То есть, я не понимаю, что должно у человека в голове происходить, чтобы он ожидал что я могу сказать хороший это код или плохой не зная что иль кто есть foo и bar, чисто по синтаксису?..
@ 2013 год уже заканчивается скоро, а ты ещё в девяностых...

Ivan8209

> 2013 год уже заканчивается скоро, а ты ещё в девяностых...
А что, в питоне появились продолжения?
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."

stm5872449

Я всерьёз утверждаю что то, что ты пытаешься сделать, скорее всего неправильно, ну, раз у тебя криво получается. И ты упорно отказываешься сказать, что ты пытаешься сделать.
Чуве, сообщение, которое ты процитировал - мой второй пост в теме и первый ответ тебе. От чего я упорно отказываюсь? :confused: Я всего лишь сказал, что break(n) - это просто синтаксический сахар, иногда удобный.
Тормозов захотелось? Уж лучше яву возьми, раз в семь-восемь быстрее будет.
В семь-восемь раз быстрее, чем, скажем, NumPy? Ну-ну.

Ivan8209

Кого обмануть хочешь?

USE_LANGUAGES= c fortran

...

.include "../../math/blas/buildlink3.mk"
.include "../../math/lapack/buildlink3.mk"

То есть твой "NumPy" написан большей частью не на питоне.
---
"Неопределённая вера порождает дилетантские души.
А дилетантизм --- преступление перед обществом."

stm5872449

Это каким-то образом делает его не питон-библиотекой? Ты только сейчас узнал о существовании C extensions?

Ivan8209

> Это каким-то образом делает его не питон-библиотекой?
Да, это делает его не библиотекой численных методов,
а всего лишь обёрткой поверх BLAS и LAPACK.
> Ты только сейчас узнал о существовании C extensions?
Ты никогда не задумался над тем, что на яве пишут какие-нибудь Colt,
EJML и как там называется это поделие от Apache, а на питоне такого
вообще не делают, привязываясь к фортрановским библиотекам?
В яве, вроде как, JNI не отменяли.
---
"Неопределённая вера порождает дилетантские души.
А дилетантизм --- преступление перед обществом."

stm5872449

Да, это делает его не библиотекой численных методов,
а всего лишь обёрткой поверх BLAS и LAPACK.
So what? Какая мне разница, как устроены внутренности вычислительной библиотеки, если она удобна и работает быстро?
Ты никогда не задумался над тем, что на яве пишут какие-нибудь Colt,
EJML и как там называется это поделие от Apache, а на питоне такого
вообще не делают, привязываясь к фортрановским библиотекам?
В яве, вроде как, JNI не отменяли.
Ты мне пытаешься доказать, что код на джаве в среднем быстрее кода на интерпретируемом языке без JIT-компиляции? Кэп.

Ivan8209

a> Просто потому что иногда для решения вычислительных задач хочется применить питон.
K> Тормозов захотелось? Уж лучше яву возьми, раз в семь-восемь быстрее будет.
> Ты мне пытаешься доказать, что код на джаве в среднем быстрее
> кода на интерпретируемом языке без JIT-компиляции?
А ты никогда не читаешь сообщения, на которые отвечаешь?
---
"Это глупость вообще, но мне это знакомая песня."

stm5872449

И где тут противоречие? Что тебе не нравится в программе на питоне, использующей С-расширения в ботлнеках?
В общем иди расскажи всем, кто юзает NumPy/SciPy, что они идиоты, пусть срочно все переписывают на жаве.

Ivan8209

> И где тут противоречие?
> Что тебе не нравится в вычислительной программе на питоне,
> использующей С-расширения в ботлнеках?
Если эта программа не реализует вычислительный алгоритм, то она
не вычислительная, а так. По твоему же NumPy видно, что питон
не реализует вычислений, а присутствует, в самом лучшем случае,
для координации.
Но даже функции координации питон выполняет довольно плохо,
так как накладные расходы на вызов функции там ого-го какие,
что легко проверяется программой строчек на тридцать-сорок.
Поэтому, если использование питона не является самоцелью,
выигрыша от его использования в вычислениях никакого нет.
---
"Narrowness of experience leads to narrowness of imagination."

Ivan8209

> В общем иди расскажи всем, кто юзает NumPy/SciPy, что они идиоты,
Ну и кто, если вычесть школьников и студентов, использует NumPy?
Ты путаешь людей, которым надо сделать лабораторную работу,
получить зачёт и забыть, с людьми, которые что-то на самом деле
вычисляют.
---
"Математик может говорить, что ему хочется,
но физик должен, хотя бы в какой-то мере, быть в здравом рассудке."

stm5872449

 wget -O- http://mathtools.web.cern.ch/node/13 | grep -i numpy

Школьники :(

digenet


Ну и кто, если вычесть школьников и студентов, использует NumPy?
можешь вот лекцию послушать
http://www.johndcook.com/blog/2011/03/21/python-hpc/
At least in our shop [Argonne National Laboratory] we have three accepted languages for scientific computing.
In this order they are C/C++, Fortran in all its dialects, and Python.
You'll notice the absolute and total lack of Ruby, Perl, Java.
Кстати, в Java какой есть аналог Numpy?
Есть наверное какие-то библиотеки для матричных вычислений, но
код будет выглядеть убого по сравнению с питоновским.
+ считать она быстрее LAPACK и BLAS не будет.
Да, NumPy обертка на фортрановскими функциями. Ну и что?
Update:
Вот еще пример, чувак далеко не школьник:
http://radimrehurek.com/2013/09/word2vec-in-python-part-two-...

bleyman

Не ведитесь на толстый троллинг же, у кохтпы — лисп гойловного мозга, ему хочется поговорить о мощности языков программирования как таковых, а не о том, что с их помощью реально можно делать.
Оставить комментарий
Имя или ник:
Комментарий: