yield from delegates yielding to a sub-generator. Simplifies generator composition.
1# Without yield from2def flatten_manual(nested):3 for item in nested:4 if isinstance(item, list):5 for sub in flatten_manual(item):6 yield sub7 else:8 yield item910# With yield from11def flatten(nested):12 for item in nested:13 if isinstance(item, list):14 yield from flatten(item) # Delegates to sub-generator15 else:16 yield item1718data = [1, [2, 3], [4, [5, 6]]]19print(list(flatten(data))) # [1, 2, 3, 4, 5, 6]
Using with iterables:
1def chain(*iterables):2 for iterable in iterables:3 yield from iterable45result = list(chain([1, 2], [3, 4], [5]))6# [1, 2, 3, 4, 5]
Benefits: