Как итератор над непустой последовательностью, без фильтрации и агрегации (sum()
и т. Д.) Ничего не может дать?
Рассмотрим простой пример:
sequence = ['a', 'b', 'c']
list((el, ord(el)) for el in sequence)
Это дает [('a', 97), ('b', 98), ('c', 99)]
, как и ожидалось.
Теперь просто поменяйте ord(el)
на выражение, которое берет первое значение из некоторого генератора, используя (...).next()
- простите надуманный пример:
def odd_integers_up_to_length(str):
return (x for x in xrange(len(str)) if x%2==1)
list((el, odd_integers_up_to_length(el).next()) for el in sequence)
Это дает []
. Да, пустой список. Нет ('a',
вещи )
кортежей. Ничего.
Но мы не фильтруем, не агрегируем и не сокращаем. Выражение генератора для n
объектов без фильтрации или агрегации должно давать n
объектов, верно? Что происходит?