2 for number in numbers)
print(list(squared_numbers)
print(list(squared_numbers))
Вывод:
[1, 4, 9, 16, 25]
[]
Почему второй раз пустой массив?
потому что твой генератор одноразовый
Как сделать многоразовым?
ну, ээ, сделай функцию, которая будет возвращать генератор
Но если использовать list и его потом изменять в tuple то все работает. Что за магия?
Что это должно значить?
Если изменить код на numbers = [1, 2, 3, 4, 5] squared_numbers = [number ** 2 for number in numbers] print(tuple(squared_numbers) print(tuple(squared_numbers)) Вывод: (1, 4, 9, 16, 25) (1, 4, 9, 16, 25) Выведет два раза, когда с tuple только 1
ШТА? зачем тут вообще вызовы tuple ?
1. Тут не генератор. 2. То был не тупл.
ты в прошлом варианте написал generator expression, а в этом использовал list comprehension
Я пытаюсь разобраться с генераторами, и подумал что (number ** 2 for number in numbers) это генерирование tuple.
>>> a = [1,2,3] >>> (a for a in a) <generator object <genexpr> at 0x7f6acad1f5e0 generator expression возвращает внезапно generator
А второе это получается генерирование массива?
[a for a in a] возвращает список
Обсуждают сегодня