Знаете ли вы, что переменные можно менять местами без временной переменной?
Во многих языках программирования для обмена значений приходится использовать дополнительную переменную:
a = 10
b = 20
temp = a
a = b
b = temp
В Python всё гораздо проще:
a = 10
b = 20
a, b = b, a
После выполнения:
a = 20
b = 10
Как это работает?
На самом деле Python сначала формирует кортеж: (b, a)
а затем распаковывает его обратно: a, b = (20, 10)
Поэтому обмен происходит корректно и без потери данных.
Но этим возможности распаковки не ограничиваются
Можно сразу получать несколько значений:
name, age, city = ("Artem", 37, "Moscow")
Или разделять начало и конец последовательности:
first, *middle, last = [1, 2, 3, 4, 5]
Результат:
first -> 1
middle -> [2, 3, 4]
last -> 5
Где это полезно?
✅ Обмен переменных
✅ Возврат нескольких значений из функции
✅ Обработка CSV и таблиц
✅ Работа с координатами
✅ Разбор данных из API
Интересный факт
Многие считают, что это просто красивый синтаксис.
На самом деле распаковка кортежей — одна из ключевых идей Python, которая используется буквально повсюду:
- в циклах через enumerate()
- в zip()
- при возврате нескольких значений из функций
- в pattern matching (Python 3.10+)
Почему range()– это не список (и почему это круто)
Многие думают, что: range(1_000_000) создаёт огромный список чисел в памяти.
Но на самом деле – нет 😎
Что такое range() на самом деле
range() – это специальный объект, который:
· НЕ хранит все числа сразу
· генерирует значения по мере необходимости
· занимает очень мало памяти
Почему это важно
Сравним две конструкции:
numbers = list(range(1_000_000))
и
numbers = range(1_000_000)
Во втором случае память почти не расходуется.
Потому что Python не создаёт миллион объектов заранее.
Как это работает
range() хранит только:
· начало
· конец
· шаг
А нужное число вычисляет «на лету». Поэтому можно спокойно писать:
for i in range(10_000_000):
...
и не бояться, что память мгновенно закончится.
Почему это пример хорошего дизайна Python
Python старается:
· не делать лишнюю работу
· не создавать лишние объекты
· вычислять данные тогда, когда они реально нужны
Это называется ленивыми вычислениями (lazy evaluation).
Где это особенно важно
· обработка больших данных
· ETL-пайплайны
· генерация последовательностей
· работа с файлами
· стриминг данных
Частая ошибка ❌
list(range(...))
Люди часто превращают range в список без необходимости.
А потом удивляются расходу памяти.
Когда список всё-таки нужен
Только если:
нужен случайный доступ с изменением
нужны методы списка
данные действительно должны храниться целиком
Главное правило
Если можно не создавать список — лучше его не создавать.
Вывод
range() – отличный пример того, как Python экономит память и делает код эффективнее без лишней магии.