Re[6]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.10 13:52
Оценка:
Здравствуйте, FR, Вы писали:

FR>Тут такое дело мне например и многим другим это кажется пятой ногой, но есть люди которые с такой фичи почему-то сильно тащатся

FR>В общем прикрутить можно, но ключевое слово else лучше заменить чем-то более внятным.

В общем, в немерле пока что решили сделать otherwise который вызывается в случае если тело цикла не выполнялось ни разу. Поглядим как использоваться будет. Если не будут, то вообще выкинем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Python] Зачем нужен else в for?
От: FR  
Дата: 28.07.10 14:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В общем, в немерле пока что решили сделать otherwise который вызывается в случае если тело цикла не выполнялось ни разу. Поглядим как использоваться будет. Если не будут, то вообще выкинем.


Такой вариант думаю будут намного больше людей использовать.
Re[8]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.10 14:55
Оценка:
Здравствуйте, FR, Вы писали:

VD>>В общем, в немерле пока что решили сделать otherwise который вызывается в случае если тело цикла не выполнялось ни разу. Поглядим как использоваться будет. Если не будут, то вообще выкинем.


FR>Такой вариант думаю будут намного больше людей использовать.


Посмотрим.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Python] Зачем нужен else в for?
От: Abyx Россия  
Дата: 09.08.10 12:34
Оценка: 68 (4)
Использовал for-else в следующем коде, очень понравилось.
    for i in range(3, srvCount * srvStruct.size, srvStruct.size):
        id_, gsIp, gsPort, isOn = srvStruct.unpack_from(serverListData, i)
        if id_ == gsId:
            if isOn:
                break
            return SERVER_IS_OFFLINE
    else:
        return SERVER_NOT_FOUND + gsId


В большинстве языков break прыгает сразу за концом цикла, чтобы выполнить какой-то код если не был выполнен break, надо либо заменять break на goto, либо вводить переменную флаг.
Использовать функции типа find() не всегда удобно — иногда проще применить цикл, чем делать обертку-итератор и лямбда функцию.
В таких случаях для поиска удобнее
for|while — break — else
чем
for|while — goto — label:
или
flag=0; for|while — flag=1; break — if !flag
In Zen We Trust
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.