python-snippet/coroutine.py

66 lines
1.8 KiB
Python
Raw Permalink Normal View History

def lireDroiteGauche(chaine):
'''Renvoie les caractères de chaine en commençant à droite'''
idx = 0
while idx != len(chaine):
print(f"[gen] Je rentre dans mon Yield")
valeur = (yield chaine[idx])
print(f"[gen] Je suis sorti du Yield")
if valeur != None:
print("[gen] Retour non nul, je coroutine !")
print(f"[gen] reçu: {valeur}")
else:
print("[gen] J'ai rien reçu, je génère")
idx += 1
class Tree:
def __init__(self, label, left=None, right=None):
self.label = label
self.left = left
self.right = right
def __repr__(self, level=0, indent=" "):
s = level*indent + repr(self.label)
if self.left:
s = s + "\n" + self.left.__repr__(level+1, indent)
if self.right:
s = s + "\n" + self.right.__repr__(level+1, indent)
return s
def __iter__(self):
return inorder(self)
def inorder(t):
if t:
for x in inorder(t.left):
yield x
yield t.label
for x in inorder(t.right):
yield x
def tree(list):
n = len(list)
if n == 0:
return []
i = n // 2
return Tree(list[i], tree(list[:i]), tree(list[i+1:]))
if __name__ == "__main__":
chaine = "abcdef"
stop = "a"
print(f"On va lire '{chaine}' à l'envers")
print(f"et faire qqch au premier '{stop}' retourné")
it_chaine = lireDroiteGauche(chaine)
print(f"\n[for] Je demande un NEXT")
for lettre in it_chaine:
print(f"[for] {lettre}")
if lettre == stop:
print(f"[for] Je réclame une coro")
it_chaine.send("yolo")
print(f"[for] Je reprends le travail")
print(f"[for] Je demande un NEXT\n")