Zistite, ako vám tento alternatívny typ funkcie môže pomôcť znížiť nároky na pamäť.

Ak čítate riadky zo súboru denníka alebo spracovávate dlhý zoznam položiek, jednou z možností je načítať celé údaje do pamäte. Tento prístup však môže využívať veľa pamäte a brániť výkonu. Generátory ponúkajú hodnotné riešenie.

Generátory eliminujú potrebu načítať všetky dáta do pamäte súčasne. Sú užitočné pri práci s veľkými množinami údajov, nekonečnými sekvenciami alebo v akomkoľvek scenári, kde je efektívnosť pamäte prvoradá.

Čo sú generátory?

Generátor je špeciálna funkcia, ktorá vám umožňuje opakovať postupnosť hodnôt. Namiesto toho, aby vracali kompletný súbor údajov, generujú – alebo prinášajú – jednu hodnotu po druhej. Vďaka tomu sú efektívne pri práci s veľkými alebo neobmedzenými sekvenciami údajov.

A pravidelná funkcia Pythonu zvyčajne vypočíta hodnotu a vráti ju. Ale generátory fungujú inak. Pozastavením a obnovením vykonávania medzi jednotlivými výnosmi môžu získať viacero hodnôt.

Kľúčový rozdiel medzi bežnými funkciami a generátormi je v tom, že namiesto použitia

instagram viewer
vrátiť generátory používajú kľúčové slovo na vytvorenie výsledku výnos.

Ako vytvoriť generátor

Ak chcete vytvoriť generátor, namiesto vrátiť vyhlásenie, použite a výnos vyhlásenie v rámci funkcie. The výnos kľúčové slovo nielen prikazuje funkcii vrátiť hodnotu, ale tiež jej umožňuje uložiť jej stav, čo umožňuje budúce obnovenie.

Tu je príklad jednoduchej funkcie generátora:

defnumeric_generator():
yield1
yield2
yield3

gen = numeric_generator()

Táto funkcia generátora poskytuje číselné hodnoty od 1 do 3.

The výnos príkaz uloží stav funkcie, pričom zachová lokálne premenné medzi volaniami, aby sa obnovil, keď požadujete ďalšiu hodnotu.

Priradením funkcie generátora k premennej sa vytvorí objekt generátora, s ktorým môžete pracovať.

Práca s generátormi

Generátory majú viacero aplikácií. Môžete ich použiť v slučkách for alebo v rámci chápania zoznamuako aj ďalšie iterovateľné štruktúry. Generátory môžu slúžiť aj ako argumenty pre funkcie.

Po vytvorení generátora ho môžete iterovať pomocou cyklu for:

for i in numeric_generator():
print(i)

Môžete tiež použiť Ďalšie funkcia na získanie hodnôt po jednej:

print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

To vám dáva väčšiu kontrolu nad objektom generátora.

Generátory môžu sledovať ich stav. Každý príkaz výnosu vo funkcii funguje ako kontrolný bod. Keď zavoláte na Ďalšie() funkcia na objekte generátora, vykonávanie nadväzuje na predchádzajúcu medzu klzu.

Hodnoty môžete do generátora odovzdať aj pomocou poslať ():

defgenerator_with_send():
# First yield: Receive a value
x = yield
print(f"Received: {x}")

# Second yield: Receive another value
y = yield
print(f"Received: {y}")

# Third yield: Yield the sum
yield x + y

gen = generator_with_send()

# Start generator and reach first yield
next(gen)

# Send 10 into generator, received at first yield
result = gen.send(10)

# Send 5 into generator, received at second yield
result = gen.send(5)

# Print result of third yield
print(result)

The poslať () metóda vám umožňuje získať hodnoty z generátora a odoslať hodnoty späť do funkcie generátora, čím ju efektívne pozastavíte a umožníte vám kontrolovať jej vykonávanie. The poslať () metóda je užitočná pri písaní korutínov alebo pri použití generátorov na pokročilé účely.

Použitie generátorových výrazov

Generátor výrazov poskytuje stručný spôsob, ako vytvoriť jednoduchý a anonymný generátor. Sú podobné ako zoznamy, ale namiesto zátvoriek používajú zátvorky.

Tu je príklad:

gen = (i**2for i in range(10))

for x in gen:
print(x)

Kód vytvára výraz generátora, ktorý dáva druhé mocniny čísel 0 až 9. Generátorové výrazy sú ideálne na lenivé generovanie postupnosti hodnôt.

Použitie generátorov na spracovanie údajov

Python generátory predstavujú pohodlný spôsob, ako opísať dátové toky a zostaviť iterátory bez toho, aby sa všetko uchovávalo v pamäti. Svoje programovanie môžete výrazne zlepšiť tým, že sa naučíte používať generátory, čím si uľahčíte zvládanie náročných úloh spracovania údajov.

Keď budete nabudúce pracovať s veľkými množinami údajov, majte na pamäti generátory a delegujte na ne úlohy náročné na prácu, aby váš kód zostal pohotový a efektívny.