Циклы for и while, операторы break и continue, волшебное слово else
В этой статье я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.
Цикл while
While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.
Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.
Оператор continue
Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)
Оператор break
Оператор break досрочно прерывает цикл.
Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же «естественным» образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Получить переменную за пределами цикла python
Здесь ничего не мешает получить это значение, кроме бесконечного цикла. Остановите его при нужном случае.
a=0 b=1 while True: if a
Если же проблема более глобальна и пример просто неудачный, то, вероятно, следует смотреть в сторону yield
Отслеживать
ответ дан 8 окт 2018 в 6:32
54.1k 3 3 золотых знака 20 20 серебряных знаков 43 43 бронзовых знака
да, пример вообще корявый получился.
8 окт 2018 в 6:40
Ну так можно прояснить, что имелось в виду. Или yield подошёл?
8 окт 2018 в 8:04
использовал global a
10 дек 2018 в 9:11
Если вы вводите новую переменную внутри цикла, главная её особенность то, что она перезаписывается при итерации:
for w in [1, 2, 3]: print w print w # 1 # 2 # 3 # 3
Заметьте, что в пространстве переменных после окончания цикла w приняла и сохранила значение 3 для дальнейших команд.
Хорошей практикой является не использование переменных из цикла, а объявление их перед ним с последующим присвоением:
w = None b = 1 for a in [0, 1]: if a < b: w = 4 break print w # 4
Плюс писать в условие для while просто True мне кажется не true - получается некоторый провал в логике программы - можно использовать обычный цикл или без него. Пример условия if else в одну строку:
a = 0 b = 1 w = 4 if a < b else None print w # 4
Как получить значение локальной переменной из цикла?
Владимир, интересно следующий вопрос будет почему inputdata = 3 🙂 ?
Алексей, Вам нужно книжку почитать, например Фленегана. Для быстрого ответа гуглите области видимости, но без книжки основам ничего не даст
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- JavaScript
- +1 ещё
В чем заключается суть бинарного поиска неотсортированного массива?
- 1 подписчик
- 9 часов назад
- 94 просмотра
Как получить локальную переменную из цикла for?
Всем привет, вопрос как мне кажется достаточно простой, но я не могу понять как достать переменную "r" из цикла for ?
for ip in list: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip)
- Вопрос задан более двух лет назад
- 632 просмотра
1 комментарий
Простой 1 комментарий
Что значит "достать"?
Решения вопроса 1
Levmuhin1 @Levmuhin1 Автор вопроса
Сам задал , сам решил 🙂
i = [] for ip in list: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) i.append(r) print(i)
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 2
Александр @shabelski89
result = [re.findall(r"ftp://\d+.\d+.\d+.\d+.\d.\d+", ip) for ip in list] print(result)
Ответ написан более двух лет назад
Нравится 1 1 комментарий
Levmuhin1 @Levmuhin1 Автор вопроса
Что значит достать? Что ты хочешь с ней сделать? Напечатать? Сохранить куда-то?
На каждой итерации цикла for твоя переменная r будет перезаписываться, и когда цикл завершится то в r будет значение записанное на последнем цикле.
1-ый способ, печатать значение r на каждой итерации.
for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) print(r)
2-ой способ, сохранить все в список и распечатать.
result = [] for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) result.append(r) print(result)
3-ий способ, создание генератора и выдача по одному результату за раз.
def f(data): for ip in ip_adresses: textlookfor = r"ftp://\d+.\d+.\d+.\d+.\d.\d+" r = re.findall(textlookfor, ip) yield r res = f(my_data) print(next(res)) print(next(res))