Как полный новичок Python, он, безусловно, выглядит так. Запуск следующее...
x = enumerate(['fee', 'fie', 'foe'])
x.next()
# Out[1]: (0, 'fee')
list(x)
# Out[2]: [(1, 'fie'), (2, 'foe')]
list(x)
# Out[3]: []
... Я замечаю, что: (a) x
имеет метод next
, как кажется
требуемый для генераторов, и (b) x
может повторяться только один раз, a
характеристика генераторов, подчеркнутых в этом знаменитом python
-tag
ответить.
С другой стороны, два наиболее высокоподдерживаемых ответа на этот
вопрос
о том, как определить, является ли объект генератором,
что enumerate()
возвращает не генератор.
import types
import inspect
x = enumerate(['fee', 'fie', 'foe'])
isinstance(x, types.GeneratorType)
# Out[4]: False
inspect.isgenerator(x)
# Out[5]: False
... а третий плохо upvoted ответ на этот вопрос, похоже, указывает, что <Т25 > действительно на самом деле возвращают генератор:
def isgenerator(iterable):
return hasattr(iterable,'__iter__') and not hasattr(iterable,'__len__')
isgenerator(x)
# Out[8]: True
Итак, что происходит? Является ли x
генератором или нет? Это в некотором смысле
"генератор-подобный", но не фактический генератор? Использует ли Python
duck-typing означает, что тест, описанный в последнем кодексе выше
на самом деле лучший?
Вместо того, чтобы продолжать записывать возможности, проходящие через мой голова, я просто выброшу это для тех из вас, кто немедленно знать ответ.