- İterable-lərə və İteratorlara Giriş
- iter() və next() ilə İteratorların Yaradılması
- Xüsusi İteratorların Yaradılması
- yield ilə Generatorların Yaradılması
- Generator İfadələri
- Generatorların İstifadə Halları
- Xülasə
- Tapşırıqlar
Python-da iterable, iterator qaytara bilən bir obyektə deyilir. İterator isə məlumat axınını təmsil edən bir obyektə deyilir. İteratorlar kolleksiyanın bütün elementlərini bir-bir keçməyə imkan verir.
Listlər, tuple-lar və string-lər iterable-lərə nümunədir.
l = [1, 2, 3]
for i in l:
print(i)
Çıxış:
1
2
3
İzah: l
listi iterable-dir və biz for
döngüsündən istifadə edərək onun elementlərini keçə bilərik.
iter()
funksiyasından istifadə edərək iterable-dən iterator yarada bilərsiniz. next()
funksiyası iterator-dan növbəti elementi almaq üçün istifadə olunur.
l = [1, 2, 3]
iter_l = iter(l)
print(next(iter_l))
print(next(iter_l))
print(next(iter_l))
Çıxış:
1
2
3
İzah: iter()
funksiyasından istifadə edərək l
listindən iter_l
iteratorunu yaradırıq. Daha sonra next()
funksiyasından istifadə edərək iterator-dan növbəti elementi alırıq.
Artıq qaytarılacaq element qalmadıqda, next()
funksiyası StopIteration
istisnası yaradır.
l = [1, 2, 3]
iter_l = iter(l)
while True:
try:
print(next(iter_l))
except StopIteration:
break
Çıxış:
1
2
3
İzah: while
döngüsü və try-except
blokundan istifadə edərək StopIteration
istisnasını idarə edirik və iterasiyanı dayandırırıq.
__iter__
və __next__
metodlarını təyin edərək xüsusi iteratorlar yarada bilərsiniz.
class CustomRange:
def __init__(self, start, end, step=1):
self.value = start
self.end = end
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.value >= self.end:
raise StopIteration
current = self.value
self.value += self.step
return current
numbers = CustomRange(1, 5, 1)
for num in numbers:
print(num)
Çıxış:
1
2
3
4
İzah: CustomRange
sinfi start
-dan end
-ə qədər verilmiş step
ilə rəqəmlər yaradan xüsusi iterator təyin edir. __iter__
metodu iterator obyektini qaytarır və __next__
metodu ardıcıllıqda növbəti dəyəri qaytarır və ya StopIteration
istisnası yaradır.
Generatorlar iteratorları yaratmaq üçün sadə bir yoldur. Generator yield
açar sözündən istifadə edərək dəyərləri bir-bir qaytaran funksiyadır.
def custom_range(start, end, step=1):
current = start
while current < end:
yield current
current += step
numbers = custom_range(1, 5)
for num in numbers:
print(num)
Çıxış:
1
2
3
4
İzah: custom_range
funksiyası start
-dan end
-ə qədər verilmiş step
ilə dəyərləri qaytaran generator-dur. Biz for
döngüsündən istifadə edərək yaradılmış dəyərləri keçirik.
Generator ifadələri generatorları yaratmaq üçün qısa bir yol təqdim edir. Onlar list comprehensions-a bənzəyir, lakin kvadrat mötərizələr əvəzinə dairəvi mötərizələrdən istifadə olunur.
gen_exp = (x * x for x in range(5))
for num in gen_exp:
print(num)
Çıxış:
0
1
4
9
16
İzah: (x * x for x in range(5))
generator ifadəsi 0-dan 4-ə qədər olan rəqəmlərin kvadratlarını qaytaran generator yaradır. Biz for
döngüsündən istifadə edərək yaradılmış dəyərləri keçirik.
Generatorlar böyük dataset-lərlə işləmək üçün faydalıdır, çünki onlar dəyərləri yaddaşda saxlamadan dinamik olaraq yaradır. Bu, onları yaddaş baxımından səmərəli edir və böyük faylların oxunması və ya sonsuz ardıcıllıqların yaradılması kimi tapşırıqlar üçün uyğun edir.
def read_large_file(file_path):
with open(file_path, 'r') as file:
for line in file:
yield line
for line in read_large_file('large_file.txt'):
print(line.strip())
İzah: read_large_file
funksiyası böyük faylı sətir-sətir oxuyan generator-dur. Biz for
döngüsündən istifadə edərək sətirləri keçirik və çap edirik.
def infinite_sequence():
num = 0
while True:
yield num
num += 1
gen = infinite_sequence()
for i in range(10):
print(next(gen))
Çıxış:
0
1
2
3
4
5
6
7
8
9
İzah: infinite_sequence
funksiyası 0-dan başlayaraq sonsuz ardıcıllıq yaradan generator-dur. Biz for
döngüsündən istifadə edərək generator-dan ilk 10 rəqəmi alırıq.
Bu fəsildə biz Python-da iterable-ləri, iteratorları və generatorları öyrəndik. iter()
və next()
funksiyalarından istifadə edərək iteratorların necə yaradılacağını, xüsusi iteratorların necə qurulacağını, yield
açar sözü ilə generatorların necə yaradılacağını və qısa generator yaratmaq üçün generator ifadələrindən necə istifadə ediləcəyini öyrəndik. Həmçinin, generatorların istifadə halları, məsələn, böyük faylların oxunması və sonsuz ardıcıllıqların yaradılması kimi mövzuları araşdırdıq.
- İlk
n
Fibonacci rəqəmlərini qaytaran generator funksiyası yazın. - 1-dən 10-a qədər olan rəqəmlərin kubunu yaradan generator ifadəsi yaradın.
- Böyük faylı sətir-sətir oxuyan və sətirlərin sayını hesablayan proqram yazın.
- Verilmiş addımla rəqəmlər aralığını keçən xüsusi iterator sinfi yaradın.
- Sonsuz cüt rəqəmlər ardıcıllığını yaradan generator funksiyası yazın.