Python Language Prendre une tranche de générateur


Exemple

Itertools "islice" vous permet de découper un générateur:

results = fetch_paged_results()  # returns a generator
limit = 20  # Only want the first 20 results
for data in itertools.islice(results, limit):
    print(data)

Normalement, vous ne pouvez pas découper un générateur:

def gen():
    n = 0
    while n < 20:
        n += 1
        yield n

for part in gen()[:3]:
    print(part)

Va donner

Traceback (most recent call last):
  File "gen.py", line 6, in <module>
    for part in gen()[:3]:
TypeError: 'generator' object is not subscriptable

Cependant, cela fonctionne:

import itertools

def gen():
    n = 0
    while n < 20:
        n += 1
        yield n

for part in itertools.islice(gen(), 3):
    print(part)

Notez que, comme une tranche normale, vous pouvez également utiliser les arguments start , stop et step :

itertools.islice(iterable, 1, 30, 3)