Bağlamalar

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

3.1 Qapanışlarla tanışlıq

Qapanış — bu elə bir funksiyadır ki, öz ətrafında olan məsafə (scope) daxilindəki dəyişənləri tutub saxlayır, məsələn, bu məsafə artıq öz işini tamamladıqdan sonra belə. Bu o deməkdir ki, qapanış dəyişənlərin xarici məsafədə olan dəyərlərini “xatırlaya” bilir və onlarla işləməyə davam edir, hətta həmin məsafə daha aktiv olmasa belə.

Qapanışların necə işlədiyini başa düşmək üçün aşağıdakı misala baxaq:


def outer_function(x):
    def inner_function(y):
        return x + y

    return inner_function
    
closure = outer_function(10)
print(closure(5))  # Çıxış: 15

Burada nə yazıldığına nəzər salaq:

Xarici funksiya (outer_function): Bu funksiya x arqumentini qəbul edir və daxili funksiya olan inner_function təyin edir. Bu funksiya y arqumentini qəbul edir və x ilə y-nin toplamını qaytarır. inner_function funksiyası isə outer_function daxilində çağırılmır, sadəcə elan olunur.

Daxili funksiya (inner_function): Bu funksiya outer_function tərəfindən qaytarılır və öz daxilində x dəyərinə keçid linkini saxlayır, hansı ki, outer_function-ə ötürülmüşdü.

Qapanış: closure dəyişəni qapanışa çevrilir, hansı ki, x dəyərini (bu halda, 10) “xatırlayır” və həmin dəyərdən çağırış zamanı istifadə edə bilir.

Adətən, heç kim qapanışlarla birinci dəfə işlədikdə hər şeyi ideal şəkildə anlamır. Buna görə gəlin qapanışlar mövzusunda anlayışımızı nümunələr üzərində inkişaf etdirək.

3.2 Bağlamaların İstifadəsinə Nümunələr

Generator-funksiya yaradılması

Bağlamalar dəyərlər ardıcıllığını yaradan generator-funksiyalar yaratmaq üçün istifadə edilə bilər.


def make_counter():
    count = 0

    def counter():
        nonlocal count
        count += 1
        return count

    return counter
    
counter = make_counter()
print(counter())  # Nəticə: 1
print(counter())  # Nəticə: 2
print(counter())  # Nəticə: 3

İzah:

Generator-funksiya (make_counter): Bu funksiya count dəyişənini yaradır və onun dəyərini artıran və döndərən counter daxili funksiyasını qaytarır.

Bağlama: counter funksiyası count dəyişənini saxlayır və hər çağırışda onu dəyişdirə bilər.

Konfiqurasiya ilə funksiya yaradılması

Bağlamalar əvvəlcədən müəyyən edilmiş konfiqurasiya ilə funksiyalar yaratmaq üçün istifadə edilə bilər.


def make_multiplier(factor):
    def multiplier(x):
        return x * factor

    return multiplier
    
double = make_multiplier(2)
triple = make_multiplier(3)
    
print(double(5))  # Nəticə: 10
print(triple(5))  # Nəticə: 15

İzah:

Konfiqurator-funksiya (make_multiplier): Bu funksiya çarpan factor qəbul edir və daxil olan dəyəri factor-a vurmaq üçün istifadə edilən multiplier daxili funksiyasını qaytarır.

Bağlamalar: doubletriple funksiyaları öz factor dəyərlərini saxlayan və onları vurma üçün istifadə edən bağlamalardır.

Parametrlərlə verilənlərin filtrasiyası

Bağlamalar parametrləri olan filtr funksiyaları yaratmaq üçün faydalı ola bilər.


def make_filter(threshold):
    def filter_func(value):
        return value > threshold
        
    return filter_func
    
filter_above_10 = make_filter(10)
data = [5, 10, 15, 20]
filtered_data = list(filter(filter_above_10, data))
print(filtered_data)  # Nəticə: [15, 20]

İzah:

Filtr-funksiya (make_filter): Bu funksiya threshold həddi qəbul edir və dəyərin həddi keçib-keçmədiyini yoxlamaq üçün istifadə edilən filter_func daxili funksiyasını qaytarır.

Bağlama: filter_func funksiyası threshold dəyərini saxlayır və onu verilənlərin filtrasiyası üçün istifadə edir.

3.3 Bağlamaların üstünlükləri və çatışmazlıqları

Bağlamalardan istifadə etmənin üstünlükləri

Vəziyyətin inkapsulyasiyası: Bağlamalar funksiyanın daxilində vəziyyəti inkapsulyasiya etməyə imkan verir; bu da qlobal dəyişənlərdən qaçınmağa və kodun oxunaqlılığını və dəstəyini artırmağa kömək edir.

Esneklik: Bağlamalar müəyyən konfiqurasiya və ya davranışa malik funksiyalar yaratmaq üçün istifadə oluna bilər ki, bu da kodun daha çevik və uyarlanabilir olmasını təmin edir.

Funksional proqramlama: Bağlamalar funksional proqramlaşdırmada mühüm bir konsepsiyadır, ali səviyyəli funksiyalar və digər funksional quruluşlar yaratmağa imkan verir.

Məhdudiyyətlər və potensial problemlər

Bir çox üstünlüyə baxmayaraq, bağlamaların bəzi məhdudiyyətləri də var:

Yaddaş istifadə etməsi: Bağlamalar artıq istifadə olunmayan obyektlərə istinadları saxlaya bilər, bu da yaddaş sızmalarına səbəb ola bilər.

Debug edərkən çətinlik: Bağlamalar kodun debug edilməsini çətinləşdirə bilər, çünki dəyişənlərin vəziyyəti aydın olmaya bilər.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION