Шта су генератори у Питхону и како их користити?



Сазнајте шта су генератори у Питхону заједно са предностима. Такође научите како да их креирате и користите заједно са разним случајевима употребе.

Стварање итерабилних елемената или објеката који омогућавају прелазак преко њих сматра се тешким задатком. Али у , спровођење овог болног задатка постаје заиста глатко. Дакле, хајде да погледамо детаљније Генераторе у Питхону.

Ево листе свих тема обрађених у овом чланку:





Па почнимо. :)

заврши програм у јави

Шта су генератори у Питхону?

Генератори су у основи функције које враћају објекте или предмете који се могу прећи. Ове функције не производе све ставке одједном, већ их производе једну по једну и само када је то потребно. Кад год је укључен у итерацију по скупу ставки, покреће се функција генератора. Генератори такође имају бројне предности.



Предности употребе генератора

  • Без генератора у Питхону, израда итерабилних датотека изузетно је тешка и дуготрајна.

  • Генератори једноставни за примену јер аутоматски примењују __итер __ (), __наред __ () и СтопИтератион који у супротном морају бити изричито наведени.



  • Меморија се чува како се производи производе по потреби, за разлику од уобичајеног . Ова чињеница постаје веома важна када треба да направите огроман број итератора. Ово се такође сматра највећом предношћу генератора.

  • Може се користити за производњу бесконачног броја предмета.

  • Такође се могу користити за спровођење низа операција

Нормалне функције у односу на функције генератора:

Генератори у Питхону се креирају баш као и ви помоћу кључне речи ‘деф’. Али, функције генератора користе кључну реч ииелд уместо ретурн. Ово се ради да би се тумача обавестило да је ово итератор. И не само ово, функције генератора се покрећу када се позове функција нект (), а не њиховим именом као у случају нормалних функција. Размотрите следећи пример да бисте га боље разумели:

ПРИМЕР:

деф фунц (а): принос а а = [1,2,3] б = фунц (а) следећи (б)

ИЗЛАЗ: [1, 2, 3]

Као што видите, у горњем излазу функц () користи кључну реч ииелд и следећу функцију за њено извршење. Али, за нормалну функцију биће вам потребан следећи део кода:

ПРИМЕР:

деф фунц (а): врати а а = [1,2,3] фунц (а)

ИЗЛАЗ: [1, 2, 3]

Ако погледате горњи пример, можда се питате зашто користити функцију Генератор када нормална функција такође враћа исти излаз. Па идемо даље и видимо како да користимо генераторе у Питхону.

Коришћење функција генератора:

Као што је раније поменуто, генератори у Питхону производе итерабле један по један. Погледајте следећи пример:

ПРИМЕР:

деф мифунц (а): вхиле а> = 3: ииелд а а = а + 1 б = мифунц (а) принт (б) нект (б)

Када извршите следећу функцију, видећете следећи излаз:

ИЗЛАЗ: 4

Овде је враћен један итерабилни објекат који задовољава услов вхиле. Након извршења, контрола се преноси на позиваоца. У случају да је потребно више ставки, исту функцију треба поново извршити позивањем функције нект ().

следећи (б)

ИЗЛАЗ: 5

При даљим извршењима, функција ће вратити 6,7, итд. Генераторске функције у Питхону аутоматски примењују методе __итер __ () и __нект __ (). Стога можете прелазити преко објеката користећи само методу нект (). Када би генерирање ставке требало да се заврши, функције генератора имплементирају СтопИтератион интерно, без потребе да бринете позиваоца. Ево још једног примера за то:

ПРИМЕР:

а = 2 деф мифунц (а): док а> = 0: даје а а - = 1 б = мифунц (а) принт (б) нект (б)

ИЗЛАЗ:

СтопИтератион-Генератори у Питхон-ЕдурекаГорња слика приказује извршење нашег програма потребан број пута. Ако поново покушате да позовете следећу функцију, она враћа поруку која приказује СтопИтератион је спроведен. Ако ово покушате да урадите са нормалним функцијама, враћене вредности се неће променити или поновити. Погледајте пример испод:

ПРИМЕР:

деф з (): н = 1 принос н н = н + 3 принос н п = з () следећи (п)

ИЗЛАЗ:

Генератори са петљама:

У случају да желите да извршите исту функцију одједном, можете да користите петљу „фор“. Ова петља помаже у итерацији објеката и након свих имплементација извршава СтопИтератион.

ПРИМЕР:

деф з (): н = 1 принос н н = н + 3 принос н за к у з (): испис (к)

ИЗЛАЗ:

један
4

Такође можете навести изразе за генерисање итерабилних објеката.

Изрази генератора:

Такође можете користити изразе заједно са петљом фор за израду итератора. То обично чини генерације итерабилним много лакшим. Израз генератора подсећа на разумевање листе и слично ламбда функције , изрази генератора креирају анонимне функције генератора.

Погледајте пример испод:

ПРИМЕР:

а = опсег (6) принт ('Разумевање листе', крај = ':') б = [к + 2 за к у а] принт (б) принт ('Израз генератора', енд = ': н') ц = (к + 2 за к у а) испис (ц) за и у ц: испис (и)

ИЗЛАЗ:

Разумевање листе: [2, 3, 4, 5, 6, 7]

Израз генератора:

2
3
4
5
6

Као што видите, у горњем излазу, први израз је разумевање листе која је наведена у [] заградама. Разумевање листе одједном даје комплетну листу ставки. Следећи је генераторски израз који враћа исте ставке, али једну по једну. Наведено је помоћу () заграда.


Генераторфункције се могу користити и у оквиру других функција.На пример:

ПРИМЕР:

а = опсег (6) принт ('Израз генератора', крај = ': н') ц = (к + 2 за к ин а) принт (ц) принт (мин (ц))

ИЗЛАЗ:

Изражавање генератора
2

Горњи програм исписује минималну вредност када је горњи израз примењен на вредности а.

Користите случајеве:

Користите генераторе у до:

  • Генериши Фибоначијеву серију
  • Генерирање бројева

Генерисање Фибоначијеве серије:

Фибоначијеве серије као што сви знамо су низови бројева при чему је сваки број збир претходна два броја. Прва два броја су 0 и 1. Ево програма за генерирање Фибоначијевих серија:

ПРИМЕР:

деф фибо (): први, други = 0,1, док је Труе: даје прво прво, друго = друго, прво + друго за к у фибо (): ако је к> 50: преломни испис (к, крај = '')

ИЗЛАЗ:

0 1 1 2 3 5 8 13 21 34

Горњи излаз приказује Фибоначијеву серију са вредностима мањим од 50. Погледајмо сада како да генеришемо листу бројева.

Генерирање бројева:

У случају да желите да генеришете одређене бројеве листе, то можете учинити помоћу функција генератора. Погледајте следећи пример:

ПРИМЕР:

пивот и унпивот у скл-у
а = опсег (10) б = (к за к у а) испис (б) за и у б: испис (и)

ИЗЛАЗ:

0
један
2
3
4
5
6
7
8
9

ПРИМЕР:

а = опсег (2,10,2) б = (к за к у а) принт (б) за и у б: принт (и)

ИЗЛАЗ:


2
4
6
8

Горњи програм вратио је парне бројеве од 2 до 10. То нас доводи до краја овог чланка о Генераторима у Питхону. Надам се да сте разумели све теме.

Обавезно вежбајте што је више могуће и вратите своје искуство.

Имате питање за нас? Молимо вас да га спомињете у одељку за коментаре овог блога „Генератори у Питхону“ и јавићемо вам се што је пре могуће.

Да бисте стекли детаљно знање о Питхону, заједно са разним апликацијама, можете се пријавити за уживо са подршком 24/7 и доживотним приступом.