Introduction aux expressions génératrices

Boîte à outils Python

Hugo Bowne-Anderson

Data Scientist at DataCamp

Expressions génératrices

  • Rappel de la compréhension de listes
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Utiliser ( ) à la place de [ ]
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Boîte à outils Python

Compréhensions de listes et générateurs

  • Compréhension de liste - renvoie une liste
  • Générateurs - renvoie un objet générateur
  • Les deux peuvent être itérés
Boîte à outils Python

Impression des valeurs provenant des générateurs (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Boîte à outils Python

Impression des valeurs provenant des générateurs (2)

result = (num for num in range(6))
  • Évaluation paresseuse
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Boîte à outils Python

Générateurs et compréhensions de listes

Boîte à outils Python

Générateurs et compréhensions de listes

Boîte à outils Python

Générateurs et compréhensions de listes

Boîte à outils Python

Conditionnel dans les expressions génératrices

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Boîte à outils Python

Fonctions génératrices

  • Produit des objets générateurs lorsqu'il est appelé
  • Définie comme une fonction ordinaire - def
  • Renvoie une séquence de valeurs au lieu d'une seule valeur
  • Génère une valeur avec le mot-clé yield
Boîte à outils Python

Créer une fonction génératrice

  • sequence.py
def num_sequence(n):
    """Generate values from 0 to n."""
    i = 0
    while i < n:
        yield i
        i += 1
Boîte à outils Python

Utiliser une fonction génératrice

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Boîte à outils Python

Passons à la pratique !

Boîte à outils Python

Preparing Video For Download...