5 удивительных скрытых возможностей Python. Часть 2

Ссылка на первую часть.

Скрытая функция 1: List Stepping

Эта функция помогает выбирать с необходимым шаговым интервалом элементы из списка. Синтаксис здесь такой:

list[start:end:step]
  • start: индекс первого контролируемого элемента в списке;
  • end: индекс первого элемента вне зоны контроля;
  • step: шаг сортировки.

Предположим, есть список с числами от 0 до 9, необходимо выбрать только четные числа. Сделать это можно так:

my_list: list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers: list = my_list[::2] # [0, 2, 4, 6, 8]

Здесь мы не указываем начальный и конечный индексы. Поэтому Python считает стартовым первый элемент, а конечным  —  последний (т. е. весь список). Затем указываем шаг  —  2. Поэтому Python начнет с первого элемента и вернет его (т. е. 0). Затем переместится на 2 шага (перейдет к 1, а затем к 2) и вернет результат (т. е. 2). Этот процесс повторяется до конца списка.

Еще один мощный трюк с пошаговым списком  —  инвертированный список через отрицательную индексацию.

my_list: list = [1, 2, 3, 4, 5]
reversed_list: list = my_list[::-1] # [5, 4, 3, 2, 1]

Скрытая функция 2: связывание операторов сравнения

В программировании часто приходится выполнять множественные сравнения как часть логического потока.

Предположим, есть переменная x, и мы хотим убедиться, что x больше 1, но меньше 10. Обычно делают что-то вроде:

x: int = 5

condition1: bool = x > 1 # проверить, что х больше 1
condition2: bool = x < 10 # проверить, что х меньше 10

print(condition1 and condition2) # True

Python позволяет объединить сравнения:

x: int = 5

print(1 < x < 10) # True
print(10 < x < 20) # False

Также можно сделать что-то вроде:

x: int = 5

print(5 == x > 4) # True
print(x < 10 < x*10 < 100) # True

Скрытая функция 3: комплексные/мнимые числа

Всем, кто изучал математику, знакомо понятие комплексных чисел. Интересная особенность Python, о которой многие не подозревают, заключается в том, что он полностью поддерживает комплексные числа. В математике для представления комплексного числа обычно используют символ i. В Python мы используем j или вызываем функцию complex().

# Создание комплексных чисел
z1 = 2 + 3j
z2 = complex(4, -2) # (4 -2j)

# Доступ к действительным и мнимым частям
print(z1.real) # 2.0
print(z1.imag) # 3.0

# Арифметика с комплексными числа
z3 = z1 + z2 # (6+1j)
z4 = z1 * z2 # (14+8j)
z5 = z1 / z2 # (0.1+0.8j)

# Сопряжение комплексного числа
z6 = z1.conjugate() # (2-3j)

Скрытая функция 4: доступ к последнему результату по символу “_”

Возможно, вы замечали, что многие программисты резервируют символ _ в качестве заполнителя некоторых переменных, которые не используются или не нужны в процессе выполнения программы.

Между тем (и многие об этом не знают), по умолчанию Python присваивает результат последнего выполнения переменной этому символу _.

x: int = 5
y: int = 99

x + y # 104
print(_) # 104

Скрытая функция 5: распаковка аргумента

Предположим, есть некоторая произвольная функция:

def my_sum(a, b, c):
return a + b + c

Есть список из 3 чисел, которые нужно передать функции. Обычно пишут:

my_list = [1, 2, 3]

result = my_sum(my_list[0], my_list[1], my_list[2])
print(result) # 6

Вместо этого в Python можно сделать так:

result = my_sum(*my_list)
print(result) # 6

Символ * распаковывает весь список и передает каждый элемент в качестве параметра функции. Далее также можно распаковать словарь с помощью **.

# Пример распаковки аргумента словаря
def my_func(a, b, c):
print(f"a={a}, b={b}, c={c}")

my_dict = {'a': 1, 'b': 2, 'c': 3}

my_func(**my_dict)

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи David Farrugia: 5 More Awesome Python Hidden Features — Part 2

Предыдущая статьяЛогирование  —  корень всех проблем отладки
Следующая статьяКак реализовать feature gate в React