Блоги

Pythonic циклы

Автор: CoolPython

Поговорим о циклах в Python. Вот пример цикла, который мог бы написать человек с C или Jav-бэкграундом:

items = [‘a’, ‘b’, ‘c’]
i = 0
while i < len(items): 
    print(items[i])
    i += 1

Что с ним не так?

  • здесь мы вручную отслеживаем индекс, а значит, создаем себе возможность сделать ошибку на единицу. Легко заехать в элемент items[3], заменив < на <=;
  • если тело цикла длинное, то частая ошибка это сделать так, что условие выхода никогда не выполнится, и войти в бесконечный цикл;
  • в Python можно выразительнее.

А именно:

for item in items: 
    print(item)

Это решение:

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

О таком и говорят pythonic — когда возможности языка используются, чтобы сделать код лаконичным, читаемым и поддерживаемым.

Но что если вам правда, очень, действительно нужен индекс? Иногда это бывает, и тогда на помощь спешит конструкция enumerate(), которая предоставляет и сам элемент, и его индекс:

for i, item in enumerate(items): 
    print(i)

В общем, если вам в Python цикле нужно делать операции не с индексами, а с самими объектами, то средства языка позволяют писать чистый и менее подверженный ошибкам код. Если индексы все же нужны, выбирайте enumerate(): пользоваться индексами напрямую — это не pythonic.

Закончу цитатой.

«В программировании есть только две сложные вещи: инвалидация кеша, выбор имени переменной, и ошибки на единицу».

(Джефф Этвуд, создатель StackOverflow).

Марина

Recent Posts

7 наилучших библиотек визуализации Python на 2024 год

Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…

4 дня ago

Как преобразовать строку в байты в Python

В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…

2 недели ago

Что такое Werkzeug?

В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…

2 недели ago

Как прибавить дни, месяцы и годы к дате в Python

При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…

3 недели ago

Социальная аутентификация в приложении на Flask

В этом руководстве мы рассмотрим, как добавить социальную аутентификацию с помощью GitHub и Google в…

1 месяц ago

Проверка типов в Python

В этой статье мы рассмотрим, что такое подсказки типов и чем они могут быть полезны.…

1 месяц ago