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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.

@+