Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
2 мин
183

Почему в Python нет tuple comprehension?

Часто начинающие разработчики знакомятся с Python и его встроенными структурами данных, такими как списки и словари. В Python есть удобная особенность,

Часто начинающие разработчики знакомятся с Python и его встроенными структурами данных, такими как списки и словари. В Python есть удобная особенность, называемая «comprehension», которая позволяет создавать списки или словари в одну строку кода. Например, можно создать список, состоящий из квадратов чисел от 1 до 10, используя list comprehension:

squares = [i**2 for i in range(1, 11)]

Аналогично, можно создать словарь, где ключами являются числа от 1 до 5, а значениями — их квадраты, используя dict comprehension:

squares_dict = {i: i**2 for i in range(1, 6)}

Однако, когда начинающий разработчик пытается использовать подобный подход для создания кортежей (tuple), он обнаруживает, что вместо кортежа создается генератор.

numbers = (i for i in range(1, 6))

Вместо ожидаемого кортежа (1, 2, 3, 4, 5) получается объект генератора. Почему же так происходит?

Причина кроется в синтаксисе Python. Круглые скобки используются для создания генераторов, и это не имеет ничего общего с кортежами. Генераторы — это специальный тип итератора, который генерирует значения «на лету», сохраняя при этом минимальное потребление памяти.

Чтобы создать кортеж, используя подход, аналогичный comprehension, нужно просто преобразовать генератор в кортеж, используя функцию tuple():

numbers_tuple = tuple(i for i in range(1, 6))

Теперь numbers_tuple является кортежем (1, 2, 3, 4, 5).

Таким образом, хотя в Python нет tuple comprehension в том виде, в котором есть list comprehension или dict comprehension, можно легко достичь того же результата, используя функцию tuple().

Добавить комментарий