Генерирането на итерации или обекти, които позволяват преминаването им, се счита за обременяваща задача. Но в , изпълнението на тази болезнена задача просто става наистина гладко. Така че нека да разгледаме по-отблизо генераторите в Python.
Ето списък на всички теми, обхванати в тази статия:
- Какво представляват генераторите?
- Предимства на използването на генератори
- Нормални функции срещу генераторни функции
- Използване на генераторски функции
- Генератори с цикли
- Генераторски изрази
- Случаи на употреба
Така че нека започнем. :)
Какво представляват генераторите в Python?
Генераторите са основно функции, които връщат обходими обекти или елементи. Тези функции не произвеждат всички елементи наведнъж, а ги произвеждат един по един и само когато е необходимо. Всеки път, когато е включен за итерация на набор от елементи, стартира се функция генератор. Генераторите също имат редица предимства.
Предимства на използването на генератори
Без генератори в Python производството на итерации е изключително трудно и продължително.
Генераторите са лесни за изпълнение, тъй като автоматично прилагат __iter __ (), __next __ () и StopIteration, които иначе трябва да бъдат изрично посочени.
Паметта се запазва, когато елементите се създават, когато е необходимо, за разлика от нормалното . Този факт става много важен, когато трябва да създадете огромен брой итератори. Това се счита и за най-голямото предимство на генераторите.
Може да се използва за създаване на безкраен брой елементи.
Те могат да се използват и за конвейериране на редица операции
Нормални функции срещу генераторни функции:
Генераторите в Python се създават точно както вие създавате използвайки ключовата дума „def“. Но функциите на генератора използват ключовата дума yield вместо return. Това се прави, за да се уведоми преводача, че това е итератор. Не само това, функциите на генератора се изпълняват, когато се извика функцията next (), а не с тяхното име, както в случай на нормални функции. Помислете за следния пример, за да го разберете по-добре:
ПРИМЕР:
def func (a): добив a a = [1,2,3] b = func (a) следващ (b)
ИЗХОД: [1, 2, 3]
Както можете да видите, в горния изход func () използва ключовата дума yield и следващата функция за нейното изпълнение. Но за нормална функция ще ви трябва следната част от кода:
ПРИМЕР:
конвертирате от double в int java
def func (a): връща a a = [1,2,3] func (a)
ИЗХОД: [1, 2, 3]
Ако разгледате горния пример, може би се чудите защо да използвате функция Генератор, когато нормалната функция също връща същия изход. Така че нека да продължим и да видим как да използваме генератори в Python.
Използване на функции на генератор:
Както бе споменато по-рано, генераторите в Python произвеждат итерации един по един. Обърнете внимание на следния пример:
ПРИМЕР:
def myfunc (a): докато a> = 3: дава a a = a + 1 b = myfunc (a) print (b) следващ (b)
Когато изпълните следната функция, ще видите следния изход:
ИЗХОД: 4
Тук е върнат един обект, който може да се итерира, отговарящ на условието while. След изпълнението контролът се прехвърля на повикващия. В случай, че са необходими повече елементи, същата функция трябва да бъде изпълнена отново чрез извикване на функцията next ().
следващ (б)
ИЗХОД: 5
При по-нататъшно изпълнение функцията ще върне 6,7 и т.н. Генераторните функции в Python автоматично прилагат методите __iter __ () и __next __ (). Следователно можете да прегледате обектите, като използвате метода next (). Когато генерирането на елемента трябва да приключи, функциите на генератора изпълняват StopIteration вътрешно, без да се притеснявате от обаждащия се. Ето още един пример за това:
ПРИМЕР:
a = 2 def myfunc (a): докато a> = 0: дава a a - = 1 b = myfunc (a) print (b) следващ (b)
ИЗХОД:
Горното изображение показва изпълнението на нашата програма необходим брой пъти. Ако се опитате да извикате следващата функция отново, тя връща съобщение с изображение StopIteration е внедрен. Ако се опитате да направите това с нормални функции, върнатите стойности няма да се променят или повторят. Обърнете внимание на примера по-долу:
ПРИМЕР:
def z (): n = 1 добив n n = n + 3 добив n p = z () следващ (p)
ИЗХОД:
Генератори с цикли:
В случай, че искате да изпълните една и съща функция наведнъж, можете да използвате цикъла ‘for’. Този цикъл помага за итерация на обектите и след всички внедрения изпълнява StopIteration.
ПРИМЕР:
def z (): n = 1 добив n n = n + 3 добив n за x в z (): печат (x)
ИЗХОД:
един
4
Можете също така да укажете изрази, за да генерирате обекти, които да могат да се изират.
Изрази на генератора:
Можете също да използвате изрази заедно с цикъла for, за да създадете итератори. Това обикновено улеснява много итерациите за поколение. Изразът на генератора прилича на разбиране на списъци и други подобни ламбда функции , генераторните изрази създават анонимни генераторски функции.
Обърнете внимание на примера по-долу:
ПРИМЕР:
a = range (6) print ('Разбиране на списъка', end = ':') b = [x + 2 за x в a] print (b) print ('Generator expression', end = ': n') c = (x + 2 за x в a) print (c) за y в c: print (y)
ИЗХОД:
Разбиране на списъка: [2, 3, 4, 5, 6, 7]
Израз на генератор:
2
3
4
5
6
Както можете да видите, в горния изход първият израз е разбиране на списък, който е посочен в скоби []. Разбирането на списъка създава пълния списък с елементи наведнъж. Следващият е израз на генератор, който връща същите елементи, но един по един. Посочва се с помощта на () скоби.
Генераторфункции могат да се използват и в други функции.Например:
ПРИМЕР:
a = range (6) print ('Generator expression', end = ': n') c = (x + 2 for x in a) print (c) print (min (c))
ИЗХОД:
Израз на генератор
2
Горната програма отпечатва минималната стойност, когато горният израз е приложен към стойностите на a.
Случаи на употреба:
Нека използваме генератори в да се:
c ++ метод за сортиране
- Генериране на серия на Фибоначи
- Генериране на числа
Генериране на серия на Фибоначи:
Поредицата на Фибоначи, както всички знаем, е поредица от числа, където всяко число е сума от предходни две числа. Първите две числа са 0 и 1. Ето една генераторна програма за генериране на серия на Фибоначи:
ПРИМЕР:
def fibo (): първи, втори = 0,1, докато True: добив първи първи, втори = втори, първи + втори за x във fibo (): ако x> 50: прекъсване на печат (x, край = '
ИЗХОД:
0 1 1 2 3 5 8 13 21 34
Горният изход показва поредицата на Фибоначи със стойности по-малки от 50. Нека сега разгледаме как да генерираме списък с числа.
Генериране на числа:
В случай, че искате да генерирате определени номера на списъка, можете да го направите с помощта на функции на генератор. Погледнете следния пример:
ПРИМЕР:
a = диапазон (10) b = (x за x в a) print (b) за y в b: print (y)
ИЗХОД:
0
един
2
3
4
5
6
7
8
9
ПРИМЕР:
a = диапазон (2,10,2) b = (x за x в a) print (b) за y в b: print (y)
ИЗХОД:
2
4
6
8
Горната програма върна четни числа от 2 до 10. Това ни води до края на тази статия за Генератори в Python. Надявам се, че сте разбрали всички теми.
Уверете се, че практикувате възможно най-много и връщате опита си.Имате въпрос към нас? Моля, споменете го в раздела за коментари в този блог „Генератори в Python“ и ние ще се свържем с вас възможно най-скоро.
За да получите задълбочени познания за Python заедно с различните му приложения, можете да се регистрирате за живо с 24/7 поддръжка и доживотен достъп.