Əvvəlki dərslərimizin birində generatorlar (hər iterasiya zamanı müəyyən bir qiyməti qaytaran funksiyalar) haqqında danışmışdıq. Bəzən isə sadə vəziyyətlərdə generator-funksiyaların əvəzinə generator-ifadələrdən də yararlanmaq olar. Python proqramlaşdırma dilində siyahı və lüğətləri generasiya etmək üçün generator-ifadələrdən geniş istifadə olunur.
Siyahı generatorları
Siyahıları adi qaydada range() funksiyasından yararlanmaqla generasiya etmək mümkündür. 1-dən 10-a qədər ədədlərdən ibarət siyahı əldə etmək üçün aşağıdakı proqramı yazmaq olar:
>>> numbers = []
>>> for i in range(1, 11):
numbers.append(i)
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
Burada append() metodu siyahının sonuna arqumentində verilən elementi əlavə edir. Əgər 1-dən 10-a qədər cüt ədədlərdən ibarət siyahı lazım olsa, aşağıdakı proqramı yaza bilərik:
>>> numbers = []
>>> for i in range(1, 11):
if i % 2 == 0:
numbers.append(i)
>>> numbers
[2, 4, 6, 8, 10]
>>>
Yuxarıda yazdığımız bu iki proqramı siyahı generatorlarından istifadə etməklə daha sadə formada tərtib etmək olardı. Siyahı generatorlarının sintaksisi aşağıdakı kimidir:
[ifadə for element in siyahı if şərt]
O zaman 1-dən 10-a qədər ədədlərdən ibarət siyahını aşağıdakı kodla əldə edə bilərik:
>>> numbers = [i for i in range(1, 11)]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
1-dən 10-a qədər cüt ədədlərdən ibarət siyahını əldə etmək üçün isə aşağıdakı kod yazıla bilər:
>>> numbers = [i for i in range(1, 11) if i % 2 == 0]
>>> numbers
[2, 4, 6, 8, 10]
>>>
Lüğət generatorları
Lüğət generatorları da siyahı generatorlarına bənzəyir. Onların sintaksisi aşağıdakı kimidir:
{açar:qiymət for element in siyahı if şərt}
Aşağıdakı proqramda lüğət generatoru vasitəsilə lüğət əldə edilir:
>>> d = {a: a ** 2 for a in range(6)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
>>>

“Generator-ifadələr” üçün bir şərh
Şərh üçün bağlıdır.