À propos du rendement Python

Générateur utilisant le rendement

Python a une commande appelée yield pour faciliter la création d'un générateur. Je n'ai pas vraiment compris le comportement, je vais donc laisser une note ci-dessous.

action de base

test.py


def yield_test():
    list0to4 = [0, 1, 2, 3, 4]
    for i in list0to4:
        yield i

for j in yield_test()
    print j

Si vous exécutez le code ci-dessus, la sortie sera la suivante.

0
1
2
3
4

Tous les éléments de [0, 1, 2, 3, 4] peuvent être lus dans l'ordre.

Combinez les générateurs

Considérons maintenant le cas de l'utilisation d'un autre générateur en combinaison.

test.py


def yield_test1():
    list0to4 = [0, 1, 2, 3, 4]
    for i in list0to4:
        yield i

def yield_test2():
    list0to2 = [0, 1, 2]
    for i in list0to2:
        yield i

iter0to2 = yield_test2()
for j in yield_test1()
    print j + iter0to2.next()

Dans ce cas, la sortie sera la suivante.

0
2
4

yield_test2 a moins d'éléments que yield_test1, mais il n'y a pas d'erreurs particulières.

Fonctionnement du générateur

Le générateur lève une exception [StopIteration] lorsqu'il va lire le suivant sans l'élément suivant. Dans l'instruction for, etc., il semble que la boucle soit arrêtée en excluant cette [Stop Iteration]. Par conséquent, dans l'exemple ci-dessus, [StopIteration] est déclenché par iter0to2.next (). Même si l'élément reste du côté yield_test1 (), l'instruction for sera omise.

Lors de l'utilisation d'une combinaison de générateurs, lequel a provoqué la sortie de la boucle? Veuillez noter que cela peut être difficile à comprendre.

Recommended Posts

À propos du rendement Python
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos de Python tqdm.
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
À propos de Python for loop
À propos des arguments de fonction (python)
[Python] Mémo sur les fonctions
Résumé sur Python3 + OpenCV3
À propos de Python, pour ~ (plage)
[Python] Mémo sur les erreurs
À propos de l'environnement de développement Python
Python: à propos des arguments de fonction
Python, à propos de la gestion des exceptions
À propos de Python Pyramid Traversal
À propos de Python3 ... (objet Ellipsis)
[Python] Chapitre 01-01 À propos de Python (First Python)
[Python] À propos de l'entrée standard
À propos de __all__ en python
Aplatir à l'aide du rendement Python de
[Python] En savoir plus sur pip
Prise en charge de Fabric pour Python 3
Python
À propos des objets et des classes Python
À propos des variables et des objets Python
À propos du module Python venv
fonction de mémorandum python pour débutant
À propos de la fonction enumerate (python)
À propos de divers encodages de Python 3
À propos de Python, len () et randint ()
À propos de Perl, Python, PHP, Ruby
À propos de la date et du fuseau horaire Python
Mémorandum sur la corrélation [Python]
Un mémorandum sur le simulacre de Python
À propos des opérateurs de comparaison de chaînes Python
À propos de Python et des expressions régulières
À propos des fonctionnalités de Python
À propos de "for _ in range ():" de python
À propos des opérations Python et OS
Python # À propos de la référence et de la copie
À propos de Python sort () et reverse ()
Une note sur [python] __debug__
Python, rendement, retour et parfois rendement de
Python: une note sur les classes 1 "Résumé"
[Python] Écrivons brièvement la notation d'inclusion
À propos de Python dict et des fonctions triées
À propos de Python et Cython dtype
[Python] Qu'est-ce que @? (À propos des décorateurs)
Ce qui était surprenant dans les classes Python
À propos de Python Pickle (cPickle) et Marshal
[Python] À propos des classes Executor et Future