Как заставить итераторы и генераторы работать в микропифоне? - PullRequest
0 голосов
/ 05 октября 2018

Вот что происходит на моей плате NodeMCU с ESP8266:

>>> x = iter((28,75,127,179))
>>> x.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'iterator' object has no attribute 'next'

То же происходит с настраиваемым пользователем генератором:

>>> def foo():
...     for i in (28,75,127,179):
...         yield i
...         
...         
... 
>>> foo
<generator>
>>> f = foo()
>>> f.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'generator' object has no attribute 'next'

По-видимому, это будет работать, поскольку объекты действительно распознаются какгенераторы / итераторы.Вопрос в том, как мне сделать эту работу?

1 Ответ

0 голосов
/ 05 октября 2018

Очевидно, что MicroPython реализует итераторы в стиле Python 3, поскольку MicroPython - это реализация Python 3 , а не Python 2. То, что я делал в своем вопросе, в основном прямо из Python 2 tutorial .Тем не менее, в Python 3 способ вещей это работает:

>>> def foo():
...     while True:
...         for i in (28,75,127,179):
...             yield i
...             
...             
... 
>>> f = foo()
>>> next(f)
28
>>> next(f)
75
>>> next(f)
127
>>> next(f)
179
>>> next(f)
28
>>> next(f)
75
...