Здравствуйте, FR, Вы писали:
FR>Тут такое дело мне например и многим другим это кажется пятой ногой, но есть люди которые с такой фичи почему-то сильно тащатся
FR>В общем прикрутить можно, но ключевое слово else лучше заменить чем-то более внятным.
В общем, в немерле пока что решили сделать otherwise который вызывается в случае если тело цикла не выполнялось ни разу. Поглядим как использоваться будет. Если не будут, то вообще выкинем.
Использовал 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