piton

Python Dekoratörleri

Python Dekoratörleri
Bu yazıda Python Dekoratörlerini tartışacağız.

Tanım: Dekoratör, Python'da bir tasarım kalıbıdır. Başka bir işlevi argüman olarak alan, değiştirmeden ona bazı işlevler ekleyen ve başka bir işlev döndüren bir işlevdir.

Buna “(@)” kullanılarak denir ve süslemek istediğimiz bir fonksiyon tanımlamadan önce yerleştirilir.

sözdizimi:

@dekoratör adı
fonksiyon tanımı

Dekoratörleri anlamak için aşağıdaki kavramları bilmemiz gerekir.
Fonksiyonlar birinci sınıf nesnelerdir. Bir fonksiyonun argüman olarak geçirilebileceği, başka bir fonksiyondan döndürülebileceği, bir değişkene atanabileceği, başka bir fonksiyonda tanımlanabileceği anlamına gelir. Daha iyi bir anlayış için aşağıdaki örneklere bakın.

  1. Bir işlev argüman olarak iletilebilir
    Örn:

    def artış(n):
    dönüş n + 1
    def demo_funcall (işlev):
    sayı = 5
    dönüş işlevi(sayı)
    demo_funcall (artış)

    Burada artırma işlevi argüman olarak iletildi

    örnek 1.not:

    Çıktı:

    >> piton örneği1.p

  2. İşlev başka bir işlevden döndürülebilir
    Örn:

    kesinlikle dilek():
    def say_wish():
    "Doğum günün kutlu olsun" geri dön
    say_wish'i iade et
    merhaba = dilek()
    Merhaba()

    örnek2.not:

    Çıktı:

    >> piton örneği2.p

    Burada dilek işlevinden dönen say_wish işlevi

  3. Fonksiyon değiştirilebilir ve bir değişkene atanabilir
    Örn:

    tanım ekle(a,b):
    a + b'yi döndür
    sum2nos = ekle # Burada değişkene atanan fonksiyon ekle
    toplam2nos(5,11)

    örnek3.not:

    Çıktı:
    >> piton örneği3.p

  4. Fonksiyonu başka bir fonksiyon içinde tanımlayın
    Örn:

    tanım ekle(a,b):
    tanım toplamı2(a,b):
    a + b döndür
    res = toplam2(a,b)
    dönüş res
    ekle(10,15)

    örnek4.not:

    Çıktı:
    >> piton örneği4.p

Kapanış:

Python, iç içe geçmiş bir işlevin, çevreleyen işlevin dış kapsamına erişmesine izin verir.

def selamlama(mesaj):
"Ekleme İşlevi"
def send_greeting():
"İç içe işlev"
yazdır(mesaj)
tebrik göndermek()
selam ("Günaydın")

örnek5.not:

Çıktı:

>> piton örneği5.p

Şimdi yukarıdaki kavramları anladıktan sonra bir dekoratör örneği yazacağız.

Ör1: Burada mesaj fonksiyonunu süsleyeceğiz. Orijinal işlevi değiştirmeden **** içindeki mesajı yazdırma, i.e., mesaj fonksiyonu.

#dekoratör başlangıcı
def print_msg(işlev):
def sarmalayıcı():
işlev()
iade paketi
#dekoratör sonu
tanım mesajı():
print(“Bu, dekoratörü göstermek için ilk örnek”)
merhaba = print_msg(mesaj)
Merhaba()

örnek6.not:

Çıktı:

>> piton örneği6.p

En basit haliyle, işlev tanımının üstüne dekoratör yerleştirebilir ve aşağıda gösterildiği gibi işlevi çağırabiliriz:

Burada *** içinde süslemek istediğimiz ip ne olursa olsun, bu dekoratörü kullanın.

Çıktı:

Çoklu dekoratör:

Tek bir işlev için birden fazla dekoratörümüz olabilir. Burada dekoratör dediğimiz sırayla uygulanır.
sözdizimi:
@decorator2
@decorator1
fonksiyon tanımı

Burada 1. dekoratör uygulanacaktır, ardından 2. dekoratör.

Argümanları dekoratör işlevlerine iletmek:

Sarmalayıcı işlevine argümanları iletebiliriz. Süslemek istediğimiz fonksiyona iletilen argümanlar.

Örn:

def deco_wish(işlev):
def sarmalayıcı (arg1, arg2):
print ('geçen argümanlar ',arg1, arg2'dir)
Yazdır ('*********************')
fonksiyon (arg1, arg2)
Yazdır ('*********************')
iade paketi
@deco_wish
def dilek(a1, a2):
yazdır(a1,a2)
dilek ('İyi', 'Günaydın')
dilek ('İyi', 'Öğleden Sonra')

örnek7.not:

Çıktı:

>> piton örneği7.p

Dekoratör işlevine değişken sayıda argüman iletin:

*args (sayılar gibi anahtar sözcük olmayan bağımsız değişkenler) ve **kwargs (sözlük gibi anahtar sözcük bağımsız değişkenleri) kullanarak herhangi bir sayıda bağımsız değişken iletebiliriz. Her ikisi de konumsal argümanlardır ve argümanları args ve kwargs değişkenlerinde saklar.

Not: Burada args ve kwargs yerine herhangi bir isim kullanabiliriz ancak bu isimlerin kullanılması tavsiye edilir.

Örn:

def dec_var_args(işlev):
def sarmalayıcı(*args, **kwargs):
print('Anahtar kelime olmayan argümanlar', argümanlar)
print('Anahtar kelime argümanları', kwargs)
işlev(*args)
iade paketi
@ dec_var_args
def fun_non_key_args(*args):
args içinde ben için:
yazdır(i)
@ dec_var_args
def fun_key_args():
print(“Anahtar kelime argümanları”)
fun_non_key_args((4,5,6))
fun_key_args(fname='Anand', lname='Matematik')

örnek8.not:

Çıktı:

>> piton örneği8.p

Ör2: Diyelim ki 2 fonksiyonumuz var
Function1: Verilen listedeki sayıların toplamını hesaplayın
Function2: Her sayıyı 2 ile çarpın ve verilen sayı listesine ekleyin
Her birinin yürütme için geçen süreyi hesaplamak istiyorsak, bunu 2 şekilde yapabiliriz

  1. Kodu her işlevde başlangıç ​​ve bitiş zamanı arasına yerleştirin
  2. Zamanı hesaplamak için dekoratör yaz

Dekoratör kullanılarak çözülen aşağıdaki koda bakın:

#dekoratör başlangıcı
exe_time_calc(işlev):
def sarmalayıcı(arg):
start_time = tarihsaat.tarih saat.şimdi()
işlev(arg)
end_time = tarihsaat.tarih saat.şimdi()
print ("Fonksiyonun yürütülmesi için geçen süre" + func.__name__ + " is " + str(bitiş_zamanı - bitiş_zamanı))
iade paketi
#dekoratör sonu
@exe_time_calc
def cal_avg(veri):
toplam = 0
verilerde i için:
toplam += ben
print ("Verilen sayı listesinin ortalaması ", sum//len(veri))
@exe_time_calc
tanım mul_by_2(veri):
toplam = 0
verilerde i için:
toplam += + (i*2)
print ("2 ile çarpıldıktan sonraki tüm sayıların toplamı ", toplam)
cal_avg ([10,20,30,40,50])
mul_by_2([10,20,30,40,50])

örnek9.not:

Çıktı:

>> piton örneği9.p

Yukarıdaki dekoratör, herhangi bir fonksiyon için yürütme süresini hesaplamak için kullanılabilir. Bir dekoratör kullanarak, dekoratörü işlev tanımının üzerine yerleştirmek için yürütme süresini hesaplama gereksinimimiz olduğunda tekrarlanan kodu önleyebiliriz.

Sonuç:

Dekoratörler, dekore edilen işlevin orijinal kodunu değiştirmeden bir işlevin/yöntemin işlevselliğini değiştirir. Bunu kullanarak tekrarlanan kod yazmaktan kaçınabiliriz. Dekoratör kavramını bilmek bizi python'da güçlü kılacaktır. Dekoratörü aşağıdaki durumlarda kullanabiliriz:

Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...
Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...