Itérateurs et générateurs

Générateurs

Les générateur permettent de créer plus simplement que les interrateurs des objets itérabes.

Même exemple pour mélanger les lettres d'un mot que celui de l'itérateur

from random import randint

def letter_random(word):
    letters = list(word)
    for l in range(len(word)):
        rand_letter = randint(0, len(letters) -1 )
        yield letters.pop(rand_letter)



word = 'Bonjour'
word_shuffle = ''.join([l for l in letter_random(word)])
print(word_shuffle)

 

Itérateurs

Un itérateur est objet dans lequel on peut parcourir les elements un à un à l'aide de la fonction next, et consumer l'object.

Exemple d'un itérateur pour mélanger les lettres d'un mot

from random import randint

class letter_random():
    def __init__(self,word):
        self.i = 0
        self.max = len(word)
        self.rest = list(word)

    def __iter__(self) :
        return self

    def __next__(self) :
        if self.i < self.max:
            letter = self.rest.pop(randint(0, len(self.rest) - 1 ))
            self.i += 1
            return letter
        else:
            raise StopIteration()

word = 'Bonjour'
letter_random = letter_random(word)
word_shuffle = ''.join([l for l in letter_random])
print(word_shuffle.capitalize())