Pyton

Generator Pythona

Generator Pythona
W tym temacie nauczymy się Generatora Pythona.

Definicja: Generator jest jak normalna funkcja, która generuje zakres wartości za pomocą wydajność słowo kluczowe. Zwraca jeden obiekt na raz. Wewnętrznie używa iteratora. Aby uzyskać dostęp do następnego elementu Kolejny() funkcja jest używana, czy możemy jej użyć dla pętla. Jeśli spróbujemy uzyskać dostęp do wartości spoza zakresu, podnosi a StopIteracja błąd.

Zobaczymy kilka przykładów, aby lepiej zrozumieć

Dawny: funkcja generatora dla zakresu wartości

def zakres_zabawy(n):
x = 0
podczas gdy x < n:
wydajność x
x += 1
y = zabawa_zakresowa (3)
#call za pomocą pętli for
print('Generuj wartości przy użyciu metody next()')
dla mnie w range_fun(3):
drukuj(i)
#wywołaj generator przy użyciu następnej metody
print('Generuj wartości za pomocą metody pętli for')
drukuj(następny(y))
drukuj(następny(y))
drukuj(następny(y))
print(next(y))#Zostanie zgłoszony wyjątek Zatrzymaj iterację

Dawny: Funkcja generatora dla serii Fibonacciego

def fib_fun(n):
x, y = 0, 1
podczas gdy x < n:
wydajność x
x, y = y, x + y
z = fib_fun(6) #obiekt generatora
print('Generuj wartości przy użyciu metody next()')
drukuj(następny(z))
drukuj(następny(z))
drukuj(następny(z))
drukuj(następny(z))
drukuj(następny(z))
drukuj(następny(z))
print('Generuj wartości za pomocą metody pętli for')
dla mnie w fib_fun(6):
drukuj(i)

Dawny: Funkcja generatora do tworzenia zakresu wartości z zadaną wartością początkową i końcową.

def mój_zakres(początek, koniec):
prąd = początek
póki prąd < end:
wydajność prąd
prąd +=1
print('Generuj wartości przy użyciu metody next()')
liczby = mój_zakres(1,5)
drukuj(następny(liczby))
drukuj(następny(liczby))
drukuj(następny(liczby))
drukuj(następny(liczby))
print('Generuj wartości używając metody pętli for')
dla num w moim_zakresie(1,5):
drukuj (liczba)

Dawny: Generator do mnożenia każdej liczby (mniejszej niż liczba) przez liczbę

def gen_mulby_num(maks.,liczba):
n = 0
podczas gdy n < max:
wydajność n * liczba
n += 1
dla mnie w gen_mulby_num(5,3):
drukuj(i)

Dawny: Generator do znajdowania sześcianu dla zakresu wartości

def gen_mulby_num(maks,liczba):
n = 0
podczas gdy n < max:
wydajność n * liczba
n += 1
dla mnie w gen_mulby_num(5,3):
drukuj(i)

Dawny: wiele generatorów: znajdź kwadrat liczb parzystych wygenerowanych z liczby

Generator 1: generuj wartości parzyste z podanej liczby

Generator 2: generuj liczby kwadratowe z wartości generatora1

def gen_even(m):
n = 0
podczas gdy n < m:
jeśli n % 2 == 0:
wydajność n
n += 2
def gen_square(liczby):
dla num w liczbach:
wydajność 2 * liczba
dla n w gen_square(gen_even(15)):
drukuj(n)


Dawny: Wiele generatorów: utwórz serię fibnacciego i dodaj wartość 10 dla każdej liczby.

Generator1: generuje szereg Fibonacciego z podanej liczby

Generator2: dodaj każdą liczbę o 10 z generatora1

def gen_fib(n):
x, y = 0, 1
podczas gdy x < n:
wydajność x
x, y = y, x + y
def gen_add_10(liczby):
dla num w liczbach:
wydajność 10 + liczba
dla n w gen_add_10(gen_fib(5)):
drukuj(n)


Zrozumienia generatora:

Wyrażenia generatora są podobne do wyrażeń listowych, w których lista używa nawiasów kwadratowych; to używa normalnego nawiasu.

Dawny:

nums = (i dla i w zakresie(10))
drukuj(typ(liczby))
drukuj(lista(liczby))

Różnica między generatorem a normalną funkcją:

  1. Generator dostarcza wartości za pomocą wydajność słowo kluczowe, w którym normalna funkcja używa powrót słowo kluczowe
  2. Generator uruchamia się od miejsca, w którym się zatrzymał przy następnym wywołaniu. Normalna funkcja wykonuje wszystkie instrukcje za każdym razem.
  3. Generator oszczędza pamięć, ponieważ zwraca jedną wartość na raz. Więc możemy go użyć do generowania nieskończonych wartości.

Wniosek:

Generator jest bardzo pomocny, gdy mamy do czynienia z ogromnymi/dużymi danymi. W danym momencie przechowuje tylko jedną część danych, a nie całe dane. Koncepcja generatorów jest uważana za zaawansowaną koncepcję w Pythonieth.

Gry Jak przechwytywać i przesyłać strumieniowo sesję gry w systemie Linux
Jak przechwytywać i przesyłać strumieniowo sesję gry w systemie Linux
W przeszłości granie w gry było uważane tylko za hobby, ale z czasem branża gier odnotowała ogromny wzrost pod względem technologii i liczby graczy. P...
Gry Najlepsze gry do grania ze śledzeniem rąk
Najlepsze gry do grania ze śledzeniem rąk
Oculus Quest niedawno wprowadził świetny pomysł śledzenia rąk bez kontrolerów. Przy stale rosnącej liczbie gier i działań, które wspierają zarówno for...
Gry Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Granie w gry pełnoekranowe lub korzystanie z aplikacji w trybie pełnoekranowym bez rozpraszania uwagi może odciąć Cię od istotnych informacji systemow...