Souci avec l'emploi de yield
Bonjour à tous,
Je viens de me pencher sur le module itertools et dans la doc Pyrhon, j'y trouve des yield à profusion...
J'ai décidé de tester les exemples proposés...
Et là, ça commence mal.
1er exemple (code obtenu ici : http://docs.python.org/library/itertools.html), 1er problème.
Code:
1 2 3 4 5
| def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element |
Et moi d'en conclure - bêtement - que si je tape chain('ABC', 'DEF') en ligne de commande, je vais obtenir A B C D E F...
Vous, ça ne va pas vous surprendre, moi, si !
Voilà mes essais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| >>> chain('ABC', 'DEF')
<generator object chain at 0x011BE1C0>
>>> chain('ABC', 'DEF').next()
'A'
>>> for i in range(6):
chain('ABC', 'DEF')
<generator object chain at 0x011BE2D8>
<generator object chain at 0x011BE0F8>
<generator object chain at 0x011BE1C0>
<generator object chain at 0x011BE2D8>
<generator object chain at 0x011BE0F8>
<generator object chain at 0x011BE1C0>
>>> for i in range(6):
print chain('ABC', 'DEF').next()
A
A
A
A
A
A |
Les autres exemples sont encore plus intéressants, mais pour chacun, je me heurte au même problème.
Je pense que c'est dû à l'emploi de yield, parce que si je remplace yield par return :
Code:
1 2
| >>> chain('ABC', 'DEF')
'A' |
Et d'ailleurs pourquoi y a-t-il un affichage ? Il n'y a de print nulle part !?
Merci de m'éclairer.
@+