** Notes sur Python efficace ** Point 9 Considérons une formule génératrice pour la notation à grande inclusion (p18 ~ 20)
Il y a quelques problèmes avec le traitement des inclusions avec de grandes quantités de données.
Le générateur résout également ces problèmes. L'avantage du générateur est qu'il n'appelle pas à chaque fois la séquence entière. Puisqu'il est appelé un par un et traité, il n'y a presque pas de problème de dépassement de mémoire.
L'expression du générateur a une syntaxe similaire à la notation d'inclusion et est écrite entre () au lieu de [].
my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
print(it)
>>>
<generator object <genexpr> at 0x103fe93a8>
※Mise en garde C'est l'objet générateur qui est retourné par l'expression générateur, pas la valeur. Pour générer une valeur, utilisez la fonction next () pour générer la valeur. Encore une fois, le générateur ne génère aucune valeur!
print(next(it))
print(next(it))
>>>
1
2
De plus, l'itérateur renvoyé par un générateur peut être immédiatement affecté à un autre générateur.
my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
roots = ((x, x ** 0.5) for x in it)
print(next(roots))
print(next(roots))
>>>
(1, 1.0)
(2, 1.4142135623730951)
Nous n'avons pas prévu le temps de traitement cette fois, mais en raison des caractéristiques du générateur, cela ne prendra pas beaucoup de temps. C'est donc une fonction très pratique pour traiter des données à grande échelle.
Recommended Posts