Müəllifi Kərim Tahiroğlu olan bu kitab Python proqramlaşdırma dili ilə bağlı Azərbaycan dilində nəşr edilmiş ilk ədəbiyyatdır.
Nüfuzlu TIOBE Proqramlaşdırma İcmasının məlumatlarına görə Python hazırda dünya üzrə ilk onluqda yer alan populyar proqramlaşdırma dili sayılır. Python dili 1991-ci ildə Guido van Rossum tərəfindən işlənib hazırlanmışdır. Proqramlaşdırmanın müasir tələblərinə cavab verən bu dil universaldır. Bu gün Google, Intel, CISCO, Hewlett-Packard, Qualcomm, IBM və NASA kimi qurumlar bir çox layihələrini Python dilində işləyib hazırlayırlar. Python dili pulsuz olaraq yayılır. Bu dili öyrənmək asan və əyləncəlidir. Odur ki, Python dili nəinki peşəkar proqramçılar tərəfindən istifadə olunur, eləcə də həvəskarlar, məktəblilər də bu dilin imkanlarından geniş surətdə faydalanırlar. Əgər proqramlaşdırmaya yeni başlayırsınızsa, o zaman Python dili tam Sizə görədir.
Sizə təqdim edilən bu kitab ali məktəb tələbələri, informatika müəllimləri, orta məktəb şagirdləri və ümumiyyətlə proqramlaşdırmanı öyrənmək istəyən hər kəs üçün nəzərdə tutulmuşdur.
Bu bloqda isə Sizləri bir-birindən maraqlı məlumatlar, proqramlar və əlbəttə ki, dərslər gözləyir. Kitab və bloqla bağlı öz düşüncələrinizi, təklif və rəylərinizi müəlliflə bölüşə bilərsiniz. Sizə uğurlar 🙂
Sinif tərkibində (metodların daxilində və ya xaricində) elan olunan, lakin kənardan müraciət edilə bilməyən dəyişənlər private (özəl) dəyişənlər adlanır. Özəl dəyişənlər önlərində iki altdan xətt ilə elan olunur:
Burada Circle sinfində __adef dəyişəni özəl dəyişən kimi elan edilmişdir. Bu dəyişənə yalnız sinif daxilindən müraciət etmək mümkündür. Ona görə də, yuxarıdakı proqram kodunda axırıncı sətir icra olunduqdan sonra xəta qeydə alınacaqdır.
Python proqramlaşdırma dilində verilənlər tipindən biri də lüğət (dict) tipidir. Lüğətlər – nizamlanmamış və açar ilə müraciət edilə bilən ixtiyari obyektlər yığımıdır. Bəzən lüğətləri assosiativ massivlər və ya heş-cədvəllər də adlandırırlar. Lüğətlərin elementləri açar: qiymət cütlərindən ibarət olub vergüllə ayrılırlar. Lüğətin özü isə fiqurli mötərizə {} daxilində göstərilir. Qeyd etmək lazımdır ki, açarlar dəyişməyən tipdə (sətir, ədəd və ya kortej kimi) və unikal olmalıdırlar, qiymətlər isə istənilən tipdə olub təkrarlana bilər. Lüğətlər müxtəlif üsullarla konstruksiya edilə bilər.
Burada None qiyməti NoneType tipinin yeganə qiymətidir. Ondan default (susmaya görə) arqumentlərin funksiyaya ötürülmədiyi zaman qiymətin yoxluğunu ifadə etmək üçün istifadə olunur.
Lüğət generatoru vasitəsilə
>>> d = {a: a**2 for a in range(6)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
>>>
Yuxarıdakı proqram kodu (lüğət generatoru) daha yığcamdır. Halbuki biz aşağıdakı variantdan da istifadə edə bilərdik:
>>> d = {}
>>> for a in range(6):
d[a] = a**2
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
>>>
Burada bir məqamı da göstərmək lazımdır ki, lüğət generatorundan istifadə etdiyimiz zaman istəyə uyğun olaraq, if operatorunu da işlədə bilərik:
>>> d = {a: a**2 for a in range(10) if a % 2 == 1}
>>> d
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
>>>
Lüğətlər nizamlanmamış elementlər toplusu olduğundan ardıcıllıq tiplərindəki indeksləmə, dilimləmə və s. kimi əməliyyatlar onlar üçün keçərli deyil. Lüğətlərin uzunluğunu len() funksiyası ilə müəyyən etmək mümkündür. Verilmiş açarın lüğətə daxil olub-olmadığını isə üzvlük operatorları (in və not in) vasitəsilə yoxlamaq olar. Unutmayın ki, üzvlük yoxlaması qiymətlər üçün deyil, yalnız açarlar üçün tətbiq edilə bilər. Lüğətlərdən isə for sayğaclı dövründə qiymətlər çoxluğu kimi istifadə oluna bilər.
Aşağıdakı cədvəldə lüğət tipi ilə bağlı bir sıra metodlar verilmişdir:
Metod
Təyinatı
get(key[,default])
Verilmiş açar (key) lüğətdə varsa, onun qiymətini qaytarır; yoxdursa, onda default kimi (susmaya görə) göstərilən qiymət qaytarılır. Metodda default qiymət göstərilmədikdə None olaraq qəbul edilir.
fromkeys(seq[, v])
Siyahıda (seq) verilmiş açarlardan və göstərilən qiymətlə (v) yeni bir lüğət düzəldir. Metodda v qiyməti göstərilmədikdə bu None olaraq qəbul edilir.
items()
Lüğət elementlərinin yeni görünüşünü (açar, qiymət) cütləri şəklində qaytarır.
keys()
Lüğət açarlarının yeni görünüşünü qaytarır.
values()
Lüğət qiymətlərinin yeni görünüşünü qaytarır.
pop(key[,default])
Verilmiş açar (key) lüğətdə mövcuddursa, həmin elementi silir və onun qiymətini göstərir. Açar yoxdursa, onda default olaraq (susmaya görə) göstərilən qiymət qaytarılır. Metodda default qiymət göstərilmədikdə və açar (key) da tapılmadıqda, xəta qeydə alınır.
popitem()
Lüğətdən ixtiyari bir elementi xaric edir və onu (açar, qiymət) şəklində göstərir. Lüğət boşdursa, xəta qeydə alınır.
clear()
Lüğətin bütün elementlərini silir.
update([other])
Lüğəti başqa (other) lüğət və ya digər (açar, qiymət) cütləri iterasiyası hesabına yeniləyir. Bu zaman mövcud açarlar yeni qiymətlərini alır, olmayanlar isə qiymətləri ilə bərabər lüğətə əlavə olunurlar.
copy()
Lüğətin nüsxəsini çıxarır.
setdefault(key[,default])
Verilmiş açar (key) lüğətdə varsa, onun qiymətini qaytarır. Açar yoxdursa, onda bu açarı default olaraq (susmaya görə) göstərilən qiymət ilə bərabər lüğətə əlavə edir və default qiymətini qaytarır. Metodda default qiymət göstərilmədikdə bu, None olaraq qəbul edilir.
Lüğətin elementlərinə açarlar vasitəsilə müraciət etmək mümkündür. Bunun üçün açarı ya [] daxilində, ya da get() funksiyası ilə vermək lazımdır:
Lüğətin elementlərini dəyişmək və eləcə də yenilərini əlavə etmək mümkündür. Göstərilən açar lüğətdə mövcuddursa, onun qiyməti yenilənmiş olacaq. Əks halda, lüğətə yeni element (açar və qiyməti) əlavə olunacaq:
items(), keys() və values() metodlarının qaytardıqları obyektlər görünüşobyektləri adlanır. Onlar lüğət yazılarını dinamik şəkildə təqdim edir. Başqa sözlə, lüğət dəyişdiyi zaman görünüş obyektləri də bu dəyişiklikləri əks etdirir.
Çoxluq – nizamlanmamış təkrarlanmayan elementlər toplusudur. Python dilində iki növ çoxluq tipi var: set və frozenset. Bunların arasındakı yeganə fərq ondan ibarətdir ki, set dəyişən, frozenset isə dəyişməyən tipdir. Daha dəqiq desək, set tipindəki elementlər toplusunu dəyişmək (yeni element əlavə etmək və çıxarmaq) mümkündür, frozenset tipində isə bu mümkün deyil. Çoxluqlar aşağıdakı üsullarla konstruksiya edilə bilər:
Bir-birindən vergüllə (,) ayrılan çoxluğun elementləri müxtəlif tipdə qiymətlərdən ibarət ola bilər. Lakin təcrübədə, adətən, eynitipli elementlərdən istifadə edirlər. Çoxluğun özü isə fiqurlu mötərizə daxilində göstərilir. Çoxluqlar həmçinin set və frozenset konstruksiyaları ilə də verilə və boş da ola bilər. Yuxarıdakı proqramda st4 = set() və fs3 = frozenset() konstruksiyalarıdanboş çoxluqları düzəltmək üçün istifadə olundu. Çalışın ki, boş çoxluğu göstərmək üçün {} konstruksiyasından istifadə etməyəsiniz. Çünki interpretator bu yazılışı çoxluq kimi qəbul etməyəcək. Çoxluqlar nizamlanmamış elementlər toplusu olduqlarına görə ardıcıllıq tiplərində olan indeksləmə, dilimləmə və s. kimi əməliyyatlar onlar üçün keçərli deyil. Çoxluqların uzunluğunu len() funksiyası ilə müəyyən etmək mümkündür. Verilmiş qiymətin çoxluğa daxil olub-olmadığını isə üzvlük operatorları (in və not in) vasitəsilə yoxlamaq olar. Çoxluqlardan da for sayğaclı dövründə qiymətlər çoxluğu kimi istifadə oluna bilər. Aşağıdakı cədvəldə set tipi ilə bağlı bir sıra metodlar verilmişdir:
Metod
Təyinatı
add()
Çoxluğa element əlavə edir.
remove()
Verilmiş elementi çoxluqdan xaric edir. Göstərilmiş element çoxluqda yoxdursa, xəta qeydə alınır.
discard()
Verilmiş elementi çoxluqdan xaric edir. Göstərilmiş element çoxluqda yoxdursa, xəta qeydə alınmır.
pop()
Çoxluqdan ixtiyari bir elementi xaric edir və göstərir. Çoxluq boşdursa, xəta qeydə alınır.
clear()
Çoxluğun bütün elementlərini silir.
copy()
Çoxluğun nüsxəsini çıxardır.
update()
Çoxluğu özü ilə digər çoxluqları birləşdirərək yeniləyir.
union()
Çoxluqları birləşdirərək yeni bir çoxluq düzəldir.
difference()
Verilmiş çoxluqların fərqindən yeni bir çoxluq düzəldir.
difference_update()
Çoxluqdan digər çoxluğun bütün elementlərini xaric edir.
symmetric_difference()
Verilmiş çoxluqların simmetrik fərqindən yeni bir çoxluq düzəldir.
symmetric_difference_update()
Çoxluğu özü ilə digər çoxluğun simmetrik fərqini əldə edərək yeniləyir.
intersection()
Çoxluqların kəsişməsindən yeni bir çoxluq düzəldir.
intersection_update()
Çoxluğu özü ilə digər çoxluğun kəsişməsini əldə edərək yeniləyir.
isdisjoint()
Verilmiş iki çoxluq kəsişmədikdə True qiymətini qaytarır.
issubset()
Çoxluq digər çoxluğun alt çoxluğu olduqda True qiymətini qaytarır.
issuperset()
Çoxluq digər çoxluğun üst çoxluğu olduqda True qiymətini qaytarır.
Aşağıdakı misalları nəzərdən keçirək:
>>> a = {1, 2, 3, 4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
>>> a.remove(5)
>>> a
{1, 2, 3, 4}
>>>
>>> a.remove(5)
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
a.remove(5)
KeyError: 5
>>> a.discard(5)
>>> a.pop()
1
>>> a
{2, 3, 4}
>>> a.clear()
>>> a
set()
>>>
>>> a = {1, 2, 3}
>>> b = a.copy()
>>> b
{1, 2, 3}
>>> c = {4, 5}
>>> b.update(c)
>>> b
{1, 2, 3, 4, 5}
>>> d = {4, 5, 6, 7}
>>> e = b.union(d)
>>> e
{1, 2, 3, 4, 5, 6, 7}
>>> f = e.difference(d)
>>> f
{1, 2, 3}
>>> e.difference_update(f)
>>> e
{4, 5, 6, 7}
>>>
>>> a = {1, 2, 3, 4, 5}
>>> b = {4, 5, 6, 7, 8}
>>> a.symmetric_difference(b)
{1, 2, 3, 6, 7, 8}
>>> a.symmetric_difference_update(b)
>>> a
{1, 2, 3, 6, 7, 8}
>>>
>>> a = {1, 2, 3, 4, 5}
>>> b = {4, 5, 6, 7, 8}
>>> a.intersection(b)
{4, 5}
>>> a.intersection_update(b)
>>> a
{4, 5}
>>> c = {1, 2, 3}
>>> a.isdisjoint(c)
True
>>> d = {1, 2}
>>> d.issubset(c)
True
>>> e = {1, 2, 3, 4, 5}
>>> e.issuperset(c)
True
>>>
Yuxarıda sadalanan metodlardan, çoxluqlarda dəyişikliyə gətirib çıxaranlardan başqa, digərləri frozenset tipinə də tətbiq edilə bilər.