4 нестандартных трюка Python, которые полезно знать

Инструменты, которые помогут освоить Python

Продолжаем публикации для начинающих разработчиков в среде 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.

Надеюсь, это было полезно. Спасибо за прочтение!

Поделиться...
Share on facebook
Share on twitter
Share on vk