Ano ang mga Generator sa Python at Paano gamitin ang mga ito?



Alamin kung ano ang mga generator sa Python kasama ang mga pakinabang. Alamin din kung paano lumikha at gumamit ng mga ito kasama ang iba't ibang mga kaso ng paggamit.

Ang pagbuo ng mga iterable o bagay na nagpapahintulot sa pag-apak sa mga ito ay itinuturing na isang mabibigat na gawain. Ngunit, sa , ang pagpapatupad ng masakit na gawaing ito ay nagiging makinis lamang. Kaya't magpatuloy tayo at tingnan nang mabuti ang Mga Generator sa Python.

ay isang relasyon sa java

Narito ang isang listahan ng lahat ng mga paksang sakop sa artikulong ito:





Kaya't magsimula tayo. :)

Ano ang mga Generator sa Python?

Ang mga tagabuo ay karaniwang mga pagpapaandar na nagbabalik ng mga nadadaang bagay o item. Ang mga pagpapaandar na ito ay hindi gumagawa ng lahat ng mga item nang sabay-sabay, sa halip ay gumagawa ito ng isa-isa at kinakailangan lamang kung kinakailangan. Kailan man ang ay kasama upang umulit sa isang hanay ng mga item, isang function ng generator ay pinatakbo. Ang mga generator ay may bilang ng mga pakinabang din.



Mga kalamangan sa paggamit ng Mga Generator

  • Nang walang Mga Generator sa Python, ang paggawa ng mga iterable ay napakahirap at mahaba.

  • Madaling ipatupad ang mga generator habang awtomatiko nilang ipinatutupad ang __iter __ (), __susunod __ () at StopIteration na kung hindi man, kailangang malinaw na tinukoy.



  • Ang memorya ay nai-save habang ang mga item ay ginawa bilang kung kinakailangan, hindi katulad ng normal . Ang katotohanang ito ay naging napakahalaga kapag kailangan mong lumikha ng isang malaking bilang ng mga iterator. Ito ay isinasaalang-alang din bilang ang pinakamalaking bentahe ng mga generator.

  • Maaaring magamit upang makabuo ng isang walang katapusang bilang ng mga item.

  • Maaari din silang magamit upang mag-pipeline ng maraming mga operasyon

Mga Karaniwang Pag-andar kumpara sa Mga Pag-andar ng Generator:

Ang mga generator sa Python ay nilikha tulad ng kung paano ka lumilikha gamit ang keyword na 'def'. Ngunit, ginagamit ng mga pagpapaandar ng Generator ang ani ng keyword sa halip na bumalik. Ginagawa ito upang maabisuhan ang interpreter na ito ay isang iterator. Hindi lamang ito, pinapatakbo ang mga pagpapaandar ng Generator kapag ang susunod na () pagpapaandar ay tinawag at hindi sa kanilang pangalan tulad ng sa normal na pag-andar. Isaalang-alang ang sumusunod na halimbawa upang maunawaan ito nang mas mabuti:

HALIMBAWA:

def func (a): magbunga ng a = [1,2,3] b = func (a) susunod (b)

OUTPUT: [1, 2, 3]

Tulad ng nakikita mo, sa output sa itaas, ginagamit ng func () ang keyword ng ani at ang susunod na pagpapaandar para sa pagpapatupad nito. Ngunit, para sa normal na pag-andar kakailanganin mo ang sumusunod na piraso ng code:

HALIMBAWA:

def func (a): ibalik ang a = [1,2,3] func (a)

OUTPUT: [1, 2, 3]

Kung titingnan mo ang halimbawa sa itaas, maaaring nagtataka ka kung bakit gagamit ng isang function ng Generator na ang normal na pagpapaandar ay nagbabalik din ng parehong output. Kaya't magpatuloy tayo at tingnan kung paano gamitin ang Mga Generator sa Python.

Paggamit ng mga pagpapaandar ng Generator:

Tulad ng nabanggit kanina, ang mga Generator sa Python ay gumagawa ng mga iterable nang paisa-isa. Tingnan ang sumusunod na halimbawa:

HALIMBAWA:

def myfunc (a): habang isang> = 3: nagbubunga ng a = a + 1 b = myfunc (a) print (b) susunod (b)

Kapag naisagawa mo ang sumusunod na pagpapaandar, makikita mo ang sumusunod na output:

OUTPUT: 4

Dito, ang isang umuulit na bagay ay naibalik na nagbibigay-kasiyahan sa habang kalagayan. Pagkatapos ng pagpapatupad, ang kontrol ay inililipat sa tumatawag. Kung sakaling maraming mga item ang kinakailangan, ang parehong pag-andar ay kailangang maipatupad muli sa pamamagitan ng pagtawag sa susunod na () pagpapaandar.

susunod (b)

OUTPUT: 5

Sa karagdagang pagpapatupad, ibabalik ng pagpapaandar ang 6,7, atbp. Ang mga pagpapaandar ng Generator sa Python ay ipatupad nang awtomatiko ang mga __iter __ () at __sunod __ () Samakatuwid, maaari mong umulit sa mga bagay sa pamamagitan lamang ng paggamit ng susunod na () pamamaraan. Kapag dapat wakasan ang pagbuo ng item, ipatupad ng Generator ang StopIteration panloob nang hindi nag-aalala ang tumatawag. Narito ang isa pang halimbawa nito:

HALIMBAWA:

a = 2 def myfunc (a): habang isang> = 0: nagbubunga ng a - = 1 b = myfunc (a) print (b) sa susunod (b)

OUTPUT:

StopIteration-Generators sa Python-EdurekaIpinapakita ng imahe sa itaas ang pagpapatupad ng aming program na kinakailangan ng bilang ng beses. Kung susubukan mong tawagan muli ang susunod na pagpapaandar, nagbabalik ito ng isang mensahe na naglalarawan StopIteration ipinatupad. Kung susubukan mong gawin ito sa mga normal na pag-andar, ang mga halagang ibinalik ay hindi magbabago o umuulit. Tingnan ang halimbawa sa ibaba:

HALIMBAWA:

def z (): n = 1 ani n n = n + 3 ani n p = z () susunod (p)

OUTPUT:

setting ng path ng klase sa java

Mga generator na may mga loop:

Kung sakaling nais mong maisagawa ang parehong pag-andar nang sabay-sabay, maaari mong magamit ang loop na 'para'. Tinutulungan ng loop na ito na umulit sa mga bagay at pagkatapos ng lahat ng pagpapatupad ay isinasagawa nito ang StopIteration.

HALIMBAWA:

def z (): n = 1 ani n n = n + 3 ani n para x sa z (): i-print (x)

OUTPUT:

isa
4

Maaari mo ring tukuyin ang mga expression upang makabuo ng mga umuugong bagay.

Mga Ekspresyon ng Generator:

Maaari mo ring gamitin ang mga expression kasama ang for loop upang makagawa ng mga iterator. Karaniwan nitong ginagawang mas madali ang henerasyon ng mga henerasyon. Ang ekspresyon ng generator ay kahawig ng mga pagkaunawa sa listahan at gusto pagpapaandar ng lambda , ang mga expression expression ay lumilikha ng hindi nagpapakilalang mga pagpapaandar ng generator.

Tingnan ang halimbawa sa ibaba:

HALIMBAWA:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 para x sa a) i-print (c) para sa y sa c: i-print (y)

OUTPUT:

Listahan ng Pag-unawa: [2, 3, 4, 5, 6, 7]

Expression ng Generator:

2
3
4
5
6

Tulad ng nakikita mo, sa output sa itaas, ang unang ekspresyon ay isang pagkaunawa sa listahan na tinukoy sa loob ng [] mga braket. Ang pag-unawa sa listahan ay gumagawa ng kumpletong listahan ng mga item nang sabay-sabay. Ang susunod ay isang expression ng generator na nagbabalik ng parehong mga item ngunit nang paisa-isa. Ito ay tinukoy gamit ang () mga braket.


TagabuoAng mga pagpapaandar ay maaaring magamit sa loob ng iba pang mga pagpapaandar pati na rin.Halimbawa:

HALIMBAWA:

a = range (6) print ('Generator expression', end = ': n') c = (x + 2 para x in a) print (c) print (min (c))

OUTPUT:

Expression ng Generator
2

Ang programa sa itaas ay naglilimbag ng min na halaga kapag ang expression sa itaas na inilapat sa mga halaga ng a.

Gumamit ng Mga Kaso:

Gumamit tayo ng mga Generator sa sa:

  • Bumuo ng Fibonacci Series
  • Bumubuo ng Mga Numero

Bumubuo ng Fibonacci Series:

Ang serye ng Fibonacci na alam nating lahat ay isang serye ng mga numero kung saan ang bawat numero ay isang kabuuan ng naunang dalawang numero. Ang unang dalawang numero ay 0 at 1. Narito ang isang programang generator upang makabuo ng serye ng Fibonacci:

HALIMBAWA:

def fibo (): una, pangalawa = 0,1 habang True: magbunga muna, pangalawa = pangalawa, una + segundo para sa x sa fibo (): kung x> 50: break print (x, end = ')

OUTPUT:

0 1 1 2 3 5 8 13 21 34

Ipinapakita ng output sa itaas ang serye ng Fibonacci na may mga halagang mas mababa sa 50. Tingnan natin ngayon kung paano makabuo ng isang listahan ng mga numero.

Bumubuo ng Mga Numero:

Kung sakaling nais mong makabuo ng mga tinukoy na numero ng listahan, magagawa mo ito gamit ang mga pagpapaandar ng generator. Tingnan ang sumusunod na halimbawa:

HALIMBAWA:

kung paano ipakita ang array sa php
a = saklaw (10) b = (x para x sa a) i-print (b) para sa y sa b: i-print (y)

OUTPUT:

0
isa
2
3
4
5
6
7
8
9

HALIMBAWA:

a = saklaw (2,10,2) b = (x para x sa a) i-print (b) para sa y sa b: i-print (y)

OUTPUT:


2
4
6
8

Ang program sa itaas ay nagbalik kahit na mga numero mula 2 hanggang 10. Dinadala nito sa amin ang katapusan ng artikulong ito sa Mga Generator sa Python. Inaasahan kong naunawaan mo ang lahat ng mga paksa.

Tiyaking nagsasanay ka hangga't maaari at ibalik ang iyong karanasan.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na 'Mga Generator sa Python' na ito at babalikan ka namin sa lalong madaling panahon.

Upang makakuha ng malalim na kaalaman sa Python kasama ang iba't ibang mga application nito, maaari kang magpatala nang live na may 24/7 na suporta at habambuhay na pag-access.