Красивый Питон — часть 1. Правильные циклы в 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 за замечательные советы.