Python-da generatorlar (Generators) — ardıcıl verilənləri tək-tək istehsal etmək üçün istifadə olunan xüsusi funksiyalardır. Onlar klassik funksiyalardan əsaslı şəkildə fərqlənir. Ən önəmli fərq odur ki, generatorlar return yerinə yield açar sözündən istifadə edirlər. Bu, o deməkdir ki, generator funksiyası çağırıldıqda bütün hesablama birdəfəlik tamamlanmır. Əvəzində, funksiyanın vəziyyəti saxlanılır və növbəti dəfə funksiyanı çağırdıqda (məsələn, next() funksiyası ilə), işləmə əvvəlki vəziyyətdən davam edir.
Generatorlar “lazy evaluation”, yəni "tənbəl qiymətləndirmə" prinsipinə əsaslanır. Bu prinsip, məlumatların yalnız ehtiyac olduğu anda yaradılmasını təmin edir. Bu, çox böyük verilənlər bazaları ilə işləyərkən və ya limitsiz (sonsuz) ardıcıllıqlar yaratmaq lazım olduqda sistemin yaddaş və prosessor resurslarını qorumağa imkan verir.
def say_hello():
yield "Salam"
yield "Necəsən?"
yield "Sağ ol"
Bu funksiyanı çağırdıqda dərhal bütün cavablar qaytarılmır. Əvəzində:
g = say_hello()
print(next(g)) # Çıxış: Salam
print(next(g)) # Çıxış: Necəsən?
print(next(g)) # Çıxış: Sağ ol
Əgər artıq yield qalmayıbsa, StopIteration xətası yaranır.
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
f = fibonacci()
for _ in range(10):
print(next(f)) # İlk 10 Fibonacci ədədi
Hər bir generator bir iterator-dur, lakin hər iterator generator deyil. Generatorlar daha sadə şəkildə iterator funksionallığını həyata keçirə bilər, çünki __iter__() və __next__() metodlarını avtomatik olaraq idarə edirlər.
IT sahəsini dərindən öyrənmək üçün kurslarımıza qoşulun. Ətraflı məlumat almaq üçün sorğu göndərin!