Генератор 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 ответ
Решение
Выражение генератора возвращает итератор, который вы можете повторять только один раз. Попытки перебрать итератор после первого раза всегда будут видеть его пустым.