Generator w Pythonie to funkcja, która zwraca iterator za pomocą słowa kluczowego Yield. W tym artykule omówimy, jak działa funkcja generatora w Pythonie.
Funkcja generatora w Pythonie
Funkcja generatora w Pythonie jest zdefiniowana jak normalna funkcja, ale kiedykolwiek musi wygenerować wartość, robi to za pomocą słowo kluczowe „profit”. zamiast wrócić. Jeśli treść def zawiera wydajność, funkcja automatycznie staje się funkcją generatora Pythona.
Utwórz generator w Pythonie
W Pythonie możemy utworzyć funkcję generatora, po prostu używając słów kluczowych def i Yield. Generator ma następującą składnię Pyton :
def function_name(): yield statement>
Przykład:
W tym przykładzie utworzymy prosty generator, który da trzy liczby całkowite. Następnie wydrukujemy te liczby całkowite, używając Pythona dla pętli .
Python3
sortowanie przez wstawianie Java
# A generator function that yields 1 for first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # Driver code to check above generator function> for> value>in> simpleGeneratorFun():> >print>(value)> |
>
>
Wyjście:
1 2 3>
Obiekt generatora
Funkcje generatora Pythona zwracają obiekt generatora, który jest iterowalny, tj. może być używany jako Iterator . Obiektów generatora używa się albo przez wywołanie metody next obiektu generatora, albo przez użycie obiektu generatora w pętli for in.
Przykład:
W tym przykładzie utworzymy prostą funkcję generatora w Pythonie do generowania obiektów za pomocą następna() funkcja .
Python3
podstawy Javy
# A Python program to demonstrate use of> # generator object with next()> > # A generator function> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # x is a generator object> x>=> simpleGeneratorFun()> > # Iterating over the generator object using next> > # In Python 3, __next__()> print>(>next>(x))> print>(>next>(x))> print>(>next>(x))> |
>
>
Wyjście:
1 2 3>
Przykład:
concat ciągi Java
W tym przykładzie utworzymy dwa generatory liczb Fibonacciego, pierwszy prosty generator i drugi generator za pomocą dla pętli .
Python3
# A simple generator for Fibonacci Numbers> def> fib(limit):> > ># Initialize first two Fibonacci Numbers> >a, b>=> 0>,>1> > ># One by one yield next Fibonacci Number> >while> a yield a a, b = b, a + b # Create a generator object x = fib(5) # Iterating over the generator object using next # In Python 3, __next__() print(next(x)) print(next(x)) print(next(x)) print(next(x)) print(next(x)) # Iterating over the generator object using for # in loop. print('
Using for in loop') for i in fib(5): print(i)> |
lista połączona i lista tablic
>
>
Wyjście:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Wyrażenie generatora Pythona
W Pythonie wyrażenie generatora to inny sposób pisania funkcji generatora. Używa Pythona zrozumienie listy technika, ale zamiast przechowywać elementy na liście w pamięci, tworzy obiekty generatora.
Składnia wyrażeń generatora
Wyrażenie generatora w Pythonie ma następującą składnię:
(expression for item in iterable)>
Przykład:
W tym przykładzie utworzymy obiekt generatora, który wypisze wielokrotności liczby 5 z zakresu od 0 do 5, które są również podzielne przez 2.
Python3
funkcja chr w Pythonie
# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)> |
>
>
Wyjście:
0 10 20>
Zastosowania generatorów w Pythonie
Załóżmy, że tworzymy strumień liczb Fibonacciego, przyjęcie podejścia generatora sprawia, że jest to trywialne; musimy po prostu wywołać next(x), aby uzyskać następną liczbę Fibonacciego, nie przejmując się tym, gdzie i kiedy kończy się strumień liczb. Bardziej praktycznym typem przetwarzania strumieniowego jest obsługa dużych plików danych, takich jak pliki dziennika. Generatory zapewniają oszczędną przestrzennie metodę przetwarzania danych, ponieważ w danym momencie przetwarzane są tylko części pliku. Do tych celów możemy również używać Iteratorów, ale Generator zapewnia szybki sposób (nie musimy tutaj pisać metod __next__ i __iter__).