|
205 / 142 / 57
Регистрация: 25.12.2014
Сообщений: 447
|
||||||||||||||||
Идея о новых опциях Python для циклов for и while10.07.2020, 19:04. Показов 1817. Ответов 28
В питоновских циклах for и while можно использовать ветвь else
Это может быть удобно в некоторых случаях. Но синтаксис неудачен - неудачно само использование слова else. Предлагаю обсудить другой синтаксис для данной цели, которого в Питоне пока нет, но который, по-моему, более нагляден. Сразу после цикла for или while можно писать специальный условный оператор
Этот оператор выглядит как обычный if, но отличие в условиях. В качестве условий может быть использовано одно из слов: break, pass или finally. Например: if break: - из цикла вышли оператором break if pass: - цикл не был выполнен ни разу if finally: - цикл был выполнен 0 или более раз (т.е. случай pass сюда тоже входит) Такой синтаксис более нагляден, не вступает в конфликт с существующим (потому что break, pass или finally сейчас не могут стоять после if\elif. Если написано только "else:", то это означает "if finally:" - этим обеспечивается совместимость с текущим синтаксисом. Но сильно ли это усложнит компилятор? Обычно грамматику строят так, чтобы достаточно было заглянуть на 1 токен вперед, чтобы понять, что это за конструкция. В данном случае, после обработки цикла компилятор увидит слово if, которое может означать просто обычный условный оператор. Но если после слова if стоит break, pass или finally, то это явно ветвь завершения цикла. Поэтому по одному слову после if можно сразу же догадаться, что это за конструкция. В предложенной выше конструкции finally включает pass, т.к. ИМХО учет случая "0 или более" полезней, чем "1 или более" и finally звучит корректней. Есть break - цикл насильно прервали, и есть finally - цикл не прерывали (это два исчерпывающих и взаимоисключающих случая, когда мы попадаем на оператор после цикла). Если нужно отличать случай, когда цикл не сработал, то можно начать так:
0
|
||||||||||||||||
| 10.07.2020, 19:04 | |
|
Ответы с готовыми решениями:
28
Организация циклов в языке Python
|
|
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
|
||||||
| 14.07.2020, 11:20 | ||||||
|
А чем вам такой вариант не угодил?
Единственный минус - лишний отступ из-за if items.
0
|
||||||
|
205 / 142 / 57
Регистрация: 25.12.2014
Сообщений: 447
|
|
| 14.07.2020, 18:13 [ТС] | |
|
ioprst, можно и так сделать. Можно какие-то флажки (булевы переменные) ввести. Можно еще как-то.
Но с расширенным синтаксисом конструкции единообразны и касаются именно цикла, а не структуры, которую цикл обрабатывает. Да и в цикле while могут быть самые разные условия.
0
|
|
|
|
||
| 14.07.2020, 20:01 | ||
|
И тогда смысл становится самоочевидным. Использование же for else без break бессмысленно. И не надо ничего дополнительно усложнять. Само расширение циклов for\while уже выходит за рамки традиционной семантики циклов. Так что, обсуждайте, не обсуждайте - никому это не нужно и никогда не будет принято в разработку.
0
|
||
|
http://1248.site
|
||||||
| 14.07.2020, 20:09 | ||||||
|
зачем нужен стартовый if, логичней было бы просто дополнение к существующему else дерективами elif и конечно же вариантами pass break и д.р. т.к. стартовое условие уже имеется, да и просто возможность обычных условий было бы неплохо
1
|
||||||
|
205 / 142 / 57
Регистрация: 25.12.2014
Сообщений: 447
|
||||||
| 14.07.2020, 20:26 [ТС] | ||||||
|
Garry Galler, Действительно, в документации пояснено, что цикл понимается, как "многократный if". Если условие выполнено, то выполняются указанные действия (тело цикла - соответствует ветке then у оператора if) и опять идет проверка условия. А если условие не выполняется, то тогда цикл превращается в обычный оператор if и у него выполняется ветка else. А break выскакивает из этого цикла (или "многократного if"), поэтому и ветка else пропускается.
Да, в этом есть какая-то логика. Но всё-таки, сопоставлять цикл и условный оператор как-то непривычно, поэтому и else после цикла выглядит непонятно. Такой синтаксис гораздо менее нагляден, чем оператор ветвления, поставленный после цикла, для разбора разных вариантов окончания этого цикла. Добавлено через 7 минут RinatV, А вот это интересное предложение, спасибо. Если вместо if писать elif, тогда сразу же (по одному токену) компилятор поймет, что это продолжение цикла, а не новый оператор. Правда "elif условие:" менее наглядно именно потому, что "непохоже на оператор ветвления после окончания цикла". Т.е. скорее похоже на какой-то цикл Дейкстры. Сравните с циклом Дейкстры из Оберон-7:
0
|
||||||
|
|
|||||||||||
| 14.07.2020, 21:01 | |||||||||||
|
TrueTerm,
Кстати, если не в курсе, обсуждение синтаксиса for..else уже было. 11 лет назад. Все закончилось решением оставить статус кво. Были предложения вида
Какой смысл вашего треда тогда?
1
|
|||||||||||
|
205 / 142 / 57
Регистрация: 25.12.2014
Сообщений: 447
|
||
| 14.07.2020, 22:41 [ТС] | ||
|
Garry Galler, действительно не в курсе, спасибо.
Интересно, что "otherwise" похоже по смыслу (в английском языке) на слово "else". А семантика совсем разная: предложенный тогда "otherwise" означает "если цикл ни разу не выполнился", а нынешний "else:" значит "если цикл завершился без break" (в частности, может и совсем не выполнялся). И толкование otherwise в смысле "цикл пустой" гораздо яснее и нагляднее, чем "завершено без break". Нынешний "else" тоже хочется толковать так же. Возможно, отслеживание break посчитали более полезным, чем обнаружение пустого цикла, поэтому наглядностью пренебрегли. И правда, пустой цикл можно сразу же обнаружить по характеристикам обрабатываемой структуры данных или предварительной проверкой условия while. А вот break обычно выполняют на какой-то итерации, и заранее его предусмотреть нельзя. Добавлено через 40 минут О идея! Можно заявить, что самый первый elif расшифровывается как "end loop. if", а все остальные как обычно "else if".
0
|
||
|
|
|||
| 14.07.2020, 22:54 | |||
|
0
|
|||
| 14.07.2020, 22:54 | |
|
Помогаю со студенческими работами здесь
29
В Python написать программу и реализовать с использованием функции и циклов Дополнительное поле в опциях продукта Сканирование папок и копирование новых появившихся файлов на windows в python
Сумма товара при включенных опциях Opencart Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|