• [^] # Re: Lazy ?

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche pyxshell : piper des flux de texte en pur Python. Évalué à 2.

    Les commandes sont implémentées comme des générateurs (cf. la doc sur yield), donc la chaîne complète forme une fonction, qui s'exécute en entier tant que l'itérable passé a qqchose à envoyer (et qu'il n'y a que des générateurs dans la séquence). Donc, sur des traitements long, tu verras les lignes s'afficher au fur et à mesure.

    Dans l'exemple suivant, la fonction sleep ne fait qu'attendre avant de passer le prochain item, et les chiffres s'affichent bien au fur et à mesure :

    >>> import time
    >>> from pyxshell.common import *
    >>> @pipe
    def sleep(stdin,t):
     for i in stdin:
     ...: time.sleep(t)
     ...: yield i
     ...: 
    >>> for i in ( range(3) | sleep(1) ):
     print(i)
     ....: 
    0
    1
    2