Генератор Python в представлении словаря не выглядит лениво

Насколько я понимаю, выражения генератора python возвращают лениво оцененные понимания и видят объекты в словарях, которые обновляются при изменении базового словаря.

Учитывая следующий код (Python 2.7.6 Windows):

d = {}
gt_three = (x for x in d.viewkeys() if x > 3)
print list(gt_three)
d[1] = 'one'
d[4] = 'four'
print list(gt_three)

Я ожидал бы вывод как:

[]
[4]

Вместо этого я получаю:

[]
[]

Если я заново создаю генератор после добавления в словарь или печатаю само представление, я вижу ожидаемый результат. Что я не понимаю в генераторах? Я довольно новичок в питоне.

1 ответ

Решение

Выражение генератора возвращает итератор, который вы можете повторять только один раз. Попытки перебрать итератор после первого раза всегда будут видеть его пустым.

Другие вопросы по тегам