Fonctions Génératrices
Une fonction génératrice est un type particulier de fonction qui utilise le mot-clé yield
au lieu de return
pour produire une séquence de valeurs. Lorsqu'une fonction génératrice est appelée, elle renvoie un objet itérateur, qui peut être parcouru pour récupérer les valeurs une par une.
L'avantage principal des fonctions génératrices réside dans leur efficacité mémoire. Les fonctions génératrices produisent les valeurs à la volée, au fur et à mesure des besoins, plutôt que de générer toute la séquence à l'avance. Cela les rend économes en mémoire, notamment lors du traitement de grands ensembles de données ou de séquences infinies.
Considérer un exemple simple de générateur. Cette fonction produit les identifiants un par un à partir de la liste donnée :
12345678910111213141516def unique_logins_from_list(login_list): # Iterate over each login in the list for login in login_list: yield login # `yield` the current login # A predefined list of available logins login_list = ["user1", "user2", "user3", "user4", "user5"] # Creating a generator instance from the login list login_generator = unique_logins_from_list(login_list) # Generate and print 5 logins, one at a time for _ in range(5): # Each call to `next()` gives the next login print(next(login_generator))
Le principe d'un générateur est qu'il permet de retourner les valeurs une par une à l'aide du mot-clé yield
, sans les stocker toutes en mémoire simultanément. Dans notre exemple, le générateur unique_logins_from_list
parcourt la liste des identifiants, en retournant chacun d'eux via yield
et en s'arrêtant à ce point. Lorsqu'on appelle next()
, le générateur reprend là où il s'était arrêté, produisant efficacement les valeurs sans avoir besoin de stocker toute la liste en mémoire en même temps. Cela rend les générateurs particulièrement utiles pour traiter de grands ensembles de données ou des flux de données.
Swipe to start coding
Générer des identifiants utilisateur uniques à l'aide d'une fonction génératrice. La fonction id_generator()
doit produire en continu des identifiants tels que "ID_1"
, "ID_2"
, etc.
- Initialiser la variable
count
avec la valeur 1, car les identifiants commencent à 1. - Utiliser une boucle
while
infinie pour générer continuellement des identifiants. - Utiliser
yield
pour retourner l'identifiant courant au formatf"ID_{count}"
. - Incrémenter
count
de 1 après chaque itération. - Initialiser l'objet générateur
id_gen
en appelantid_generator()
.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you explain how the generator resumes execution after each yield?
What happens if I call next() more times than there are items in the list?
Can you show a real-world scenario where using a generator is better than a regular function?
Awesome!
Completion rate improved to 4.35
Fonctions Génératrices
Glissez pour afficher le menu
Une fonction génératrice est un type particulier de fonction qui utilise le mot-clé yield
au lieu de return
pour produire une séquence de valeurs. Lorsqu'une fonction génératrice est appelée, elle renvoie un objet itérateur, qui peut être parcouru pour récupérer les valeurs une par une.
L'avantage principal des fonctions génératrices réside dans leur efficacité mémoire. Les fonctions génératrices produisent les valeurs à la volée, au fur et à mesure des besoins, plutôt que de générer toute la séquence à l'avance. Cela les rend économes en mémoire, notamment lors du traitement de grands ensembles de données ou de séquences infinies.
Considérer un exemple simple de générateur. Cette fonction produit les identifiants un par un à partir de la liste donnée :
12345678910111213141516def unique_logins_from_list(login_list): # Iterate over each login in the list for login in login_list: yield login # `yield` the current login # A predefined list of available logins login_list = ["user1", "user2", "user3", "user4", "user5"] # Creating a generator instance from the login list login_generator = unique_logins_from_list(login_list) # Generate and print 5 logins, one at a time for _ in range(5): # Each call to `next()` gives the next login print(next(login_generator))
Le principe d'un générateur est qu'il permet de retourner les valeurs une par une à l'aide du mot-clé yield
, sans les stocker toutes en mémoire simultanément. Dans notre exemple, le générateur unique_logins_from_list
parcourt la liste des identifiants, en retournant chacun d'eux via yield
et en s'arrêtant à ce point. Lorsqu'on appelle next()
, le générateur reprend là où il s'était arrêté, produisant efficacement les valeurs sans avoir besoin de stocker toute la liste en mémoire en même temps. Cela rend les générateurs particulièrement utiles pour traiter de grands ensembles de données ou des flux de données.
Swipe to start coding
Générer des identifiants utilisateur uniques à l'aide d'une fonction génératrice. La fonction id_generator()
doit produire en continu des identifiants tels que "ID_1"
, "ID_2"
, etc.
- Initialiser la variable
count
avec la valeur 1, car les identifiants commencent à 1. - Utiliser une boucle
while
infinie pour générer continuellement des identifiants. - Utiliser
yield
pour retourner l'identifiant courant au formatf"ID_{count}"
. - Incrémenter
count
de 1 après chaque itération. - Initialiser l'objet générateur
id_gen
en appelantid_generator()
.
Solution
Merci pour vos commentaires !
single