CodeGym /Kurslar /Python SELF AZ /Dekoratorlar

Dekoratorlar

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

5.1 Dekoratorlarla tanışlıq

Dekoratorlar — bu funksiyalardır ki, başqa bir funksiyanı arqument kimi qəbul edir və yeni bir funksiya qaytarır, beləliklə ilkin funksiyanın davranışını dəyişdirir və ya genişləndirir. Dekoratorlar kodun oxunaqlığını və təkrar istifadəsini artırmaq üçün istifadə olunur.

Dekoratorlar funksiyaların və ya metodların davranışını onların ilkin kodunu dəyişmədən modifikasiya etməyə imkan verir. Buna görə də, onlar funksionallıq əlavə etmək, loglama, icazə nəzarəti kimi bir çox məqsədlər üçün geniş istifadə olunur.

Python-da dekoratorların sintaksisi @ simvolundan istifadəni nəzərdə tutur və bu simvol dekoratorun adından əvvəl, funksiyanın təyini üzərinə yerləşdirilir.


@decorator
def my_function():
    pass

Bu, aşağıdakı kodla ekvivalentdir:


def my_function():
    pass
        
my_function = decorator(my_function)

Diqqətlə düşünün, burada nə baş verir: biz my_function funksiyasını elan edirik, amma sonra onu decorator funksiyası ilə əvəz edirik, hansına ki bizim funksiyamız arqument olaraq ötürülür. decorator funksiyası bizim funksiyanı öz seçimindən asılı olaraq çağıra bilər.

5.2 Sadə dekorator yaratmaq

Gəlin funksiyanı çağırmazdan əvvəl və sonra mesaj verən sadə bir dekoratora baxaq.


def my_decorator(func):
    def wrapper():
        print("Funksiyanı çağırmazdan əvvəl")
        func()
        print("Funksiyanı çağırdıqdan sonra")

    return wrapper
        
@my_decorator
def say_hello():
    print("Salam!")
        
say_hello()

İzahat

Dekorator (my_decorator): Bu funksiya func funksiyasını arqument olaraq qəbul edir və yeni bir wrapper funksiyasını qaytarır ki, bu da func-ı çağırır və onun çağırışından əvvəl və sonra əlavə davranış əlavə edir.

Dekoratorla funksiya (say_hello): say_hello funksiyası my_decorator dekoratoru ilə bükülüb və bu da onun çağırışı zamanı əlavə davranış əlavə edir.

Çıxış:


# Funksiyanı çağırmazdan əvvəl
Salam!
# Funksiyanı çağırdıqdan sonra

5.3 Argumentlərlə dekoratorlar

Dekoratorlar argumentlər qəbul edə bilər, bu da onların davranışını çevik şəkildə tənzimləməyə imkan verir.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Salam, {name}!")
        
say_hello("Alice")

İzah

Argumentlərlə dekorator (repeat): Bu funksiya num_times argumentini qəbul edir və decorator_repeat dekoratorunu qaytarır.

Dekorator (decorator_repeat): Bu dekorator func funksiyasını qəbul edir və yeni wrapper funksiyasını qaytarır, hansı ki, func funksiyasını num_times qədər çağırır.

Dekoratorla birlikdə funksiya (say_hello): say_hello funksiyası üç dəfə çağırılır, repeat dekoratoru sayəsində.

Nəticə:


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