2017-03-13 2 views
0

Lorsque j'utilise les éléments suivants:Utilisation de la fonction iter dans la fonction suivante

s = 'hello' 
for i in range(0,len(s)): 
    print next(iter(s)) 

Le code qu'afficher h cinq fois. Mais quand:

s = 'hello' 
s_iterable = iter(s) 
for i in range(0,len(s)): 
    print next(s_iterable) 

Toutes les lettres de hello sont imprimées.

Si dans les deux cas iter(s) et s_iterable sont des objets d'itération, pourquoi me donnent-ils des résultats différents?

+1

'pour index dans la plage (len (n'importe quoi)):' est une erreur la plupart du temps --- Python fera tout ce travail pour vous. Votre boucle pourrait être aussi simple que 'pour char in string: print char'. Voir "Loop Like a Native" de Ned Batchelder (http://nedbatchelder.com/text/iter.html) "(30 minutes [vidéo de PyCon US 2013] (https://www.youtube.com/watch? v = EnSu9hHGq5o)) pour des moyens faciles ("Pythonic") de gérer de nombreux cas comme celui-ci. –

Répondre

2

Dans la première, vous appelez plusieurs fois iter dans votre boucle. Lorsque vous appelez iter(s), il crée un nouvel itérateur pour la chaîne et ce nouvel itérateur commence depuis le début. Cela n'a pas de sens de recommencer depuis le début. C'est pourquoi vous obtenez seulement h imprimé.