42 lines
623 B
Python
42 lines
623 B
Python
# Check that yield-from can work without heap allocation
|
|
|
|
import micropython
|
|
|
|
|
|
# Yielding from a function generator
|
|
def sub_gen(a):
|
|
for i in range(a):
|
|
yield i
|
|
|
|
|
|
def gen(g):
|
|
yield from g
|
|
|
|
|
|
g = gen(sub_gen(4))
|
|
micropython.heap_lock()
|
|
print(next(g))
|
|
print(next(g))
|
|
micropython.heap_unlock()
|
|
|
|
|
|
# Yielding from a user iterator
|
|
class G:
|
|
def __init__(self):
|
|
self.value = 0
|
|
|
|
def __iter__(self):
|
|
return self
|
|
|
|
def __next__(self):
|
|
v = self.value
|
|
self.value += 1
|
|
return v
|
|
|
|
|
|
g = gen(G())
|
|
micropython.heap_lock()
|
|
print(next(g))
|
|
print(next(g))
|
|
micropython.heap_unlock()
|