Pull to refresh

Comments 19

Ну если while True кажется не эстетичным, то попробуйте while 1<5. Мне кажется, что 1>=5 - отличное условие завершения цикла.
Хммм... Кстати, практике эстетичного выхода из цикла можно посвятить целую статью. Как вам. например, такой вариант:

while True:
    print i
    i += 1
    if i == 10:
        True, False = False, True


Кто захочет добавить подобный код в проект, пожалуйста, расскажите о последствиях. Уверен, будет занимательно.
не помню, как там было, что-то вроде
#define TRUE ( (rand()%2) - 1 )
;)
это сродни сишному:
#define i j /* have a nice debug */
Посему предлагаю количеством букв „i“ обозначать глубину вложености цикла. i,ii,iii,...
я так и делаю, когда не получается дать осмысленное имя.
спасибо. малочь, а занятно. поднял бы карму кабы мог (-:
Я обычно пишу что-то вроде:

while "в Питоне нету нормальных бесконечных циклов":
  ...
а чем while True настолько неэстетичен, что надо грузить целую itertools???
from itertools import count
не всю...
а вообще хз.
Да про эстэтику я вообще сказал прикола ради, на самом деле itertools лучше только тем что не нужно ручками инкрементировать i и всё - красивее ведь.
интересно было бы еще по скорости оценить этот вариант - насколько itertools.count дает выигрыш/проигрыш в скорости...
Ну то, что руками не надо инкремент переменной делать это очень хорошо. Экономия одной строки.
Но насколько падает удобочитаемость кода? Пишите код для людей, а не для машин (с) Стив Макконнелл :-)
Нисколько не падает, очень даже красиво :) Посмотрите на haskell, но хоть и не для людей но для математиков, но при том выглядет очень выразительно.
Если учитывать три оговорки "но", то да, возможно удобочитаемость не падает.
Красиво и удобно это две разные вещи. Притом обе субъективны.

Но я предпочитаю знать, что переменная инкрементируется и видеть в каком участке кода это происходит.
Мне кажется я не одинок, потому что сколько исходников широко распространенных программ на Python я ни смотрел --- не видел таких хитростей ни разу.

Я за избавление кода от магии.
Вы конечно правы но давайте остановимся на том, что на вкус и цвет - фломастеры разные :)
Я пишу
working = True
while working:
....

и где-то в другом месте (например по сигналу TERM или INT операционной системы), ставлю working=False. Этим убиваю сразу двух зайцев: цикл длится бесконечно пока не наступит какое-то событие (например, пользователь нажмет Ctrl+C) и в тоже время гарантированно, что цикл не завершится на середине какого-то оператора, мы корректно из него выйдем, закроем все файлы, запишем данные в БД и т.п.
А вы уверены, что ваш цикл бесконечный?

...
2147483642
2147483643
2147483644
2147483645
2147483646
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: cannot count beyond PY_SSIZE_T_MAX

Проблема в том, что count не поддерживается longint, поэтому когда нужен очень большой цикл, такой метод использовать нельзя.
Sign up to leave a comment.

Articles