Красивый Питон — часть 1. Правильные циклы в Python.

Python — замечательный язык. Он прост в изучении для новичков, и в то же время обладает обширными возможностями. При программирование на Python можно лишь наслаждаться аккуратным, минималистичным и красивым кодом. Особенно, если следовать рекомендациям, которые описаны в этой и некоторых других статьях. В посте рассказано про циклы в Python.

циклы в python

Синтаксис Питона достаточно простой, однако когда вы начинаете программировать, то вероятно замечаете, что красота и минималистичность местами куда-то исчезает. Вероятно, это связано с тем, что Python-код позволяет использовать множество идиом — специфичных конструкций кода, не присущих другим языкам.

Как не надо писать циклы FOR на Python?

Для цикла используются многие, в том числе и нижеописанные, конструкции. На самом деле, это даже быстрее, чем в других языках. Кроме того, такой код весьма читаем.

Цикл по диапазону значений в Python

Одним из самых распространенных является цикл перебора некоторого диапазона значений. Что-то типа от 0 до 1000, от 1 до 99 — в общем, какие угодно диапазоны. Хороший способ использовать циклы в Python показан ниже.

#Вот так делать не надо!
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    #бла-бла
#А вот так надо. Это же классно!
for i in range(11):
    #бла-бла

В примере используется функция range(). В нее надо передавать значение, до которого будет идти перебор. При этом само значение включено не будет. В функцию можно передавать начало, конец и даже шаг перебора в качестве аргументов.

Цикл с использованием индексов и значений в Python

Еще одним частым применением циклов является цикл по последовательностям, в которых используются пары «индекс-значение».

#Вот так не нужно делать
for i in range(len(array)):
    #действия с i
    #действия с array[i]
#А так нужно, да и еще и удобно!
for i, val in enumerate(array):
    #действия с i
    #действия val

Используемая функция enumerate()  возвращает кортеж, состоящий из пар «индекс-значение». В примере это i и val. Еще функция умеет смещаться — для этого нужно передать ей индекс, с которого нужно начать перебор.

Цикл в обратном порядке в Python

И последнее, что рассмотрим в этой статье — это цикл по последовательности в обратном порядке. Циклы в Python конечно-же можно строить и с конца последовательности, постепенно приближаясь к ее началу. Только делать это нужно правильно.

#Вот так в обратном порядке последовательность не перебирают
for val in range(len(array) - 1, -1, -1):
    #действия
#А вот так перебирают. Оцените удобство!
for val in reversed(array)
    #действия

Функция reversed() просто перебирает последовательность в обратном порядке. Большего о ней рассказать нельзя. Берет последовательность, перебирает с конца, и точка.

 

На этом все. В статье показаны три общие идиомы для циклов, которые вероятно помогут вам сделать код лаконичнее и читабельней. Согласитесь, это: reversed(array) понять гораздо проще, чем это: range(len(array) -1, -1, -1).

Спасибо Jamal Moir за замечательные советы.