Generatorfunktioner
En generatorfunktion er en særlig type funktion, der anvender nøgleordet yield
i stedet for return
til at generere en sekvens af værdier. Når en generatorfunktion kaldes, returnerer den et iteratorobjekt, som kan itereres over for at hente værdier én ad gangen.
Den primære fordel ved generatorfunktioner er deres hukommelseseffektivitet. Generatorfunktioner genererer værdier løbende, efterhånden som de skal bruges, i stedet for at generere hele sekvensen på forhånd. Dette gør dem hukommelseseffektive, især ved håndtering af store datasæt eller uendelige sekvenser.
Overvej et simpelt generator-eksempel. Denne funktion leverer logins én ad gangen fra den angivne liste:
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))
Princippet bag en generator er, at den muliggør returnering af værdier én ad gangen ved hjælp af nøgleordet yield
, uden at gemme dem alle i hukommelsen på én gang. I vores eksempel gennemløber generatoren unique_logins_from_list
listen af logins og returnerer hver enkelt ved yield
og holder pause på det punkt. Når next()
kaldes, genoptager generatoren fra det sted, hvor den slap, og leverer effektivt værdier uden at skulle gemme hele listen i hukommelsen samtidigt. Dette gør generatorer særligt anvendelige til håndtering af store datasæt eller datastrømme.
Swipe to start coding
Generér unikke bruger-ID'er ved hjælp af en generatorfunktion. Funktionen id_generator()
skal kontinuerligt producere identifikatorer som "ID_1"
, "ID_2"
osv.
- Initialisér variablen
count
med værdien 1, da identifikatorer starter fra 1. - Brug en uendelig
while
-løkke til at generere identifikatorer kontinuerligt. - Brug
yield
til at returnere den aktuelle identifikator i formatetf"ID_{count}"
. - Inkrementér
count
med 1 efter hver iteration. - Initialisér generatorobjektet
id_gen
ved at kaldeid_generator()
.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Generatorfunktioner
Stryg for at vise menuen
En generatorfunktion er en særlig type funktion, der anvender nøgleordet yield
i stedet for return
til at generere en sekvens af værdier. Når en generatorfunktion kaldes, returnerer den et iteratorobjekt, som kan itereres over for at hente værdier én ad gangen.
Den primære fordel ved generatorfunktioner er deres hukommelseseffektivitet. Generatorfunktioner genererer værdier løbende, efterhånden som de skal bruges, i stedet for at generere hele sekvensen på forhånd. Dette gør dem hukommelseseffektive, især ved håndtering af store datasæt eller uendelige sekvenser.
Overvej et simpelt generator-eksempel. Denne funktion leverer logins én ad gangen fra den angivne liste:
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))
Princippet bag en generator er, at den muliggør returnering af værdier én ad gangen ved hjælp af nøgleordet yield
, uden at gemme dem alle i hukommelsen på én gang. I vores eksempel gennemløber generatoren unique_logins_from_list
listen af logins og returnerer hver enkelt ved yield
og holder pause på det punkt. Når next()
kaldes, genoptager generatoren fra det sted, hvor den slap, og leverer effektivt værdier uden at skulle gemme hele listen i hukommelsen samtidigt. Dette gør generatorer særligt anvendelige til håndtering af store datasæt eller datastrømme.
Swipe to start coding
Generér unikke bruger-ID'er ved hjælp af en generatorfunktion. Funktionen id_generator()
skal kontinuerligt producere identifikatorer som "ID_1"
, "ID_2"
osv.
- Initialisér variablen
count
med værdien 1, da identifikatorer starter fra 1. - Brug en uendelig
while
-løkke til at generere identifikatorer kontinuerligt. - Brug
yield
til at returnere den aktuelle identifikator i formatetf"ID_{count}"
. - Inkrementér
count
med 1 efter hver iteration. - Initialisér generatorobjektet
id_gen
ved at kaldeid_generator()
.
Løsning
Tak for dine kommentarer!
single