Продолжаем публикации для начинающих разработчиков в среде Python. Немного не очевидных функций Python от
3 минуты чтения
1. Многократное назначение
Если вы хотите присвоить нескольким переменным одинаковые значения, то часто пишут код, который повторяет оператор присваивания для каждой переменной.
Это может выглядеть примерно так:
a = 1
b = 1
c = 1
В Python мы можем упростить это и назначить значение каждой переменной сразу.
a = b = c = 1 # a == 1 # b == 1 # c == 1
После этого каждой переменной присваивается самое правое значение в цепочке. Мы также можем заменить 1 переменной.
val = 1 a = b = c = val # a == 1 # b == 1 # c == 1
2. Последовательность распаковки
В Python, если у нас есть последовательность, например, список, мы можем напрямую назначать элементы этой последовательности отдельным переменным без необходимости использовать цикл или отдельно индексировать каждый элемент последовательности.
our_list = [1, 2, 3] a, b, c = our_list # a == 1 # b == 2 # c == 3
Здесь мы видим, что каждому элементу списка our_list присваивается соответствующая переменная. Обратите внимание, что это работает только тогда, когда мы указываем правильное количество переменных слева – для каждого элемента в our_list должна быть только одна переменная.
Обмен значениями переменных
Полезным следствием этого является то, что мы можем менять значения переменных без использования временной переменной.
a, b = (1, 2) # a == 1 # b == 2
a, b = b, a # a == 2 # b == 1
Поскольку b, a эквивалентно кортежу (b, a), мы можем распаковать эту последовательность и переназначить ее для a и b, как мы делали выше. Изменяя кортеж с правой стороны, мы можем переназначить эти переменные любому другому набору значений. Такая возможность особенно полезна при написании итеративного кода – см. пример в нашей более ранней публикации.
3. Расширенная нарезка
Возможно, вы уже знаете, как получить фрагмент последовательности с помощью нотации our_list[begin: end], которая создает подпоследовательность оригинала. Но здесь можно пойти еще дальше с расширенной нарезкой, которая предоставляет третий аргумент, управляющий размером шага.
Расширенный синтаксис фрагмента: our_list[begin: end: step].
Step аргумент может быть положительным или отрицательным. Положительное значение начинается с начала и пропускает элементы step вперед, пока не достигнет конца.
И наоборот, отрицательное значение будет начинаться с конца и пропускать step элементов за раз, пока не достигнет начала.
Перевернуть список
Мы можем использовать расширенный синтаксис нарезки (слайса), чтобы быстро перевернуть список.
our_list = [1, 2, 3] reversed_list = our_list[:: - 1] # reversed_list == [3, 2, 1]
Задав размер шага -1, мы начинаем с последнего элемента в our_list и переходим назад на один элемент за раз, пока не достигнем начала. Это создает список, обратный исходному списку.
4. All и any
Python предоставляет две уникальные встроенные функции, которые позволяют проверить, что all (все) элементы в итерации являются True, и что any (какой – либо) элемент True. Эти функции удачно названы all и any .
all_true = [True, True, 1, 'привет'] any_true = [0, False, True, '', []]
# all(all_true) == True # any(all_true) == True
# all(any_true) == False # any(any_true) == True
Обратите внимание, что в Python все имеет значение истинности, включая строки, числа и списки. Каждый тип реализует это по-своему.
Например, в целых числах все, что не равно нулю, равно True. А для строк и списков все, что не пусто – True.
Надеюсь, это было полезно. Спасибо за прочтение!