2019-09-26 02:53:47 -04:00
|
|
|
# test for native generators
|
|
|
|
|
2023-02-01 19:51:48 -05:00
|
|
|
|
2019-09-26 02:53:47 -04:00
|
|
|
# simple generator with yield and return
|
|
|
|
@micropython.native
|
|
|
|
def gen1(x):
|
|
|
|
yield x
|
|
|
|
yield x + 1
|
|
|
|
return x + 2
|
2020-03-22 22:26:08 -04:00
|
|
|
|
|
|
|
|
2019-09-26 02:53:47 -04:00
|
|
|
g = gen1(3)
|
|
|
|
print(next(g))
|
|
|
|
print(next(g))
|
|
|
|
try:
|
|
|
|
next(g)
|
|
|
|
except StopIteration as e:
|
|
|
|
print(e.args[0])
|
|
|
|
|
2023-02-01 19:51:48 -05:00
|
|
|
|
2019-09-26 02:53:47 -04:00
|
|
|
# using yield from
|
|
|
|
@micropython.native
|
|
|
|
def gen2(x):
|
|
|
|
yield from range(x)
|
2020-03-22 22:26:08 -04:00
|
|
|
|
|
|
|
|
2019-09-26 02:53:47 -04:00
|
|
|
print(list(gen2(3)))
|
2022-05-18 01:22:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
# catching an exception from .throw()
|
|
|
|
@micropython.native
|
|
|
|
def gen3():
|
|
|
|
try:
|
|
|
|
yield 1
|
|
|
|
yield 2
|
|
|
|
except Exception as er:
|
|
|
|
print("caught", repr(er))
|
|
|
|
yield 3
|
|
|
|
|
|
|
|
|
|
|
|
g = gen3()
|
|
|
|
print(next(g))
|
|
|
|
print(g.throw(ValueError(42)))
|
|
|
|
|
|
|
|
|
|
|
|
# responding to .close()
|
|
|
|
@micropython.native
|
|
|
|
def gen4():
|
|
|
|
try:
|
|
|
|
yield 1
|
|
|
|
except:
|
|
|
|
print("raising GeneratorExit")
|
|
|
|
raise GeneratorExit
|
|
|
|
|
|
|
|
|
|
|
|
g = gen4()
|
|
|
|
print(next(g))
|
|
|
|
print(g.close())
|