Generator-ifadələr

Ə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.