Generaattorifunktiot
Generaattorifunktio on erityinen funktiotyyppi, joka käyttää yield-avainsanaa return-avainsanan sijaan arvojoukon tuottamiseen. Kun generaattorifunktiota kutsutaan, se palauttaa iteraattori-olion, jota voidaan iteroida arvojen hakemiseksi yksi kerrallaan.
Generaattorifunktioiden tärkein etu on niiden muistitehokkuus. Generaattorifunktiot tuottavat arvot tarpeen mukaan sitä mukaa kun niitä tarvitaan, eivätkä luo koko arvojoukkoa etukäteen. Tämä tekee niistä muistitehokkaita, erityisesti suurten tietomassojen tai äärettömien jonomuotoisten arvojen käsittelyssä.
Tarkastellaan yksinkertaista generaattoriesimerkkiä. Tämä funktio tuottaa kirjautumistunnukset yksi kerrallaan annetusta listasta:
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))
Generaattorin periaate on, että se mahdollistaa arvojen palauttamisen yksi kerrallaan yield-avainsanalla ilman, että kaikkia arvoja tallennetaan muistiin samanaikaisesti. Esimerkissämme unique_logins_from_list-generaattori käy läpi kirjautumistunnuslistan ja palauttaa jokaisen tunnuksen yield-kohdassa ja pysähtyy siihen. Kun next() kutsutaan, generaattori jatkaa siitä, mihin jäi, tuottaen arvot tehokkaasti ilman, että koko listaa tarvitsee tallentaa muistiin samanaikaisesti. Tämä tekee generaattoreista erityisen hyödyllisiä suurten tietomassojen tai tietovirtojen käsittelyssä.
Swipe to start coding
Luo yksilöllisiä käyttäjä-ID:tä käyttämällä generaattorifunktiota. id_generator()-funktion tulee jatkuvasti tuottaa tunnisteita kuten "ID_1", "ID_2" jne.
- Alusta muuttuja
countarvolla 1, koska tunnisteet alkavat ykkösestä. - Käytä ääretöntä
while-silmukkaa tunnisteiden jatkuvaan generointiin. - Käytä
yield-komentoa palauttaaksesi nykyisen tunnisteen muodossaf"ID_{count}". - Kasvata
count-muuttujaa yhdellä jokaisen iteraation jälkeen. - Alusta generaattoriobjekti
id_genkutsumallaid_generator().
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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.17
Generaattorifunktiot
Pyyhkäise näyttääksesi valikon
Generaattorifunktio on erityinen funktiotyyppi, joka käyttää yield-avainsanaa return-avainsanan sijaan arvojoukon tuottamiseen. Kun generaattorifunktiota kutsutaan, se palauttaa iteraattori-olion, jota voidaan iteroida arvojen hakemiseksi yksi kerrallaan.
Generaattorifunktioiden tärkein etu on niiden muistitehokkuus. Generaattorifunktiot tuottavat arvot tarpeen mukaan sitä mukaa kun niitä tarvitaan, eivätkä luo koko arvojoukkoa etukäteen. Tämä tekee niistä muistitehokkaita, erityisesti suurten tietomassojen tai äärettömien jonomuotoisten arvojen käsittelyssä.
Tarkastellaan yksinkertaista generaattoriesimerkkiä. Tämä funktio tuottaa kirjautumistunnukset yksi kerrallaan annetusta listasta:
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))
Generaattorin periaate on, että se mahdollistaa arvojen palauttamisen yksi kerrallaan yield-avainsanalla ilman, että kaikkia arvoja tallennetaan muistiin samanaikaisesti. Esimerkissämme unique_logins_from_list-generaattori käy läpi kirjautumistunnuslistan ja palauttaa jokaisen tunnuksen yield-kohdassa ja pysähtyy siihen. Kun next() kutsutaan, generaattori jatkaa siitä, mihin jäi, tuottaen arvot tehokkaasti ilman, että koko listaa tarvitsee tallentaa muistiin samanaikaisesti. Tämä tekee generaattoreista erityisen hyödyllisiä suurten tietomassojen tai tietovirtojen käsittelyssä.
Swipe to start coding
Luo yksilöllisiä käyttäjä-ID:tä käyttämällä generaattorifunktiota. id_generator()-funktion tulee jatkuvasti tuottaa tunnisteita kuten "ID_1", "ID_2" jne.
- Alusta muuttuja
countarvolla 1, koska tunnisteet alkavat ykkösestä. - Käytä ääretöntä
while-silmukkaa tunnisteiden jatkuvaan generointiin. - Käytä
yield-komentoa palauttaaksesi nykyisen tunnisteen muodossaf"ID_{count}". - Kasvata
count-muuttujaa yhdellä jokaisen iteraation jälkeen. - Alusta generaattoriobjekti
id_genkutsumallaid_generator().
Ratkaisu
Kiitos palautteestasi!
single