2019-12-22 07:47:15 -05:00
|
|
|
# Check that yield-from can work without heap allocation
|
|
|
|
|
|
|
|
import micropython
|
|
|
|
|
2023-02-01 19:51:48 -05:00
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
# Yielding from a function generator
|
|
|
|
def sub_gen(a):
|
|
|
|
for i in range(a):
|
|
|
|
yield i
|
2020-03-22 22:26:08 -04:00
|
|
|
|
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
def gen(g):
|
|
|
|
yield from g
|
2020-03-22 22:26:08 -04:00
|
|
|
|
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
g = gen(sub_gen(4))
|
|
|
|
micropython.heap_lock()
|
|
|
|
print(next(g))
|
|
|
|
print(next(g))
|
|
|
|
micropython.heap_unlock()
|
|
|
|
|
2023-02-01 19:51:48 -05:00
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
# Yielding from a user iterator
|
|
|
|
class G:
|
|
|
|
def __init__(self):
|
|
|
|
self.value = 0
|
2020-03-22 22:26:08 -04:00
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
def __iter__(self):
|
|
|
|
return self
|
2020-03-22 22:26:08 -04:00
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
def __next__(self):
|
|
|
|
v = self.value
|
|
|
|
self.value += 1
|
|
|
|
return v
|
2020-03-22 22:26:08 -04:00
|
|
|
|
|
|
|
|
2019-12-22 07:47:15 -05:00
|
|
|
g = gen(G())
|
|
|
|
micropython.heap_lock()
|
|
|
|
print(next(g))
|
|
|
|
print(next(g))
|
|
|
|
micropython.heap_unlock()
|