Piton

Python Dekoratori

Python Dekoratori
U ovom ćemo članku razgovarati o Python Dekoraterima.

Definicija: Dekorator je obrazac dizajna u Pythonu. To je funkcija koja uzima drugu funkciju kao argument, dodaje joj neku funkcionalnost bez da je mijenja i vraća drugu funkciju.

To se naziva upotrebom "(@)" i postavlja se prije definiranja funkcije koju želimo ukrasiti.

sintaksa:

@dekorator ime
Definicija funkcije

Da bismo razumjeli dekoratere, moramo znati dolje navedene koncepte.
Funkcije su prvoklasni objekti. To znači da se funkcija može proslijediti kao argument, može se vratiti iz druge funkcije, može se dodijeliti varijabli, može se definirati u drugoj funkciji. Za bolje razumijevanje pogledajte primjere u nastavku.

  1. Funkcija se može proslijediti kao argument
    Primjer:

    def inkrement (n):
    povratak n + 1
    def demo_funcall (funkcija):
    num = 5
    funkcija povrata (num)
    demo_funcall (prirast)

    Ovdje se funkcija povećanja prenosi kao argument

    primjer1.py:

    Izlaz:

    >> primjer pythona1.py

  2. Funkcija se može vratiti iz druge funkcije
    Primjer:

    def želja ():
    def say_wish ():
    povratak "Sretan rođendan"
    vratite say_wish
    bok = želja ()
    zdravo()

    primjer2.py:

    Izlaz:

    >> primjer pythona2.py

    Ovdje se funkcija say_wish vratila iz funkcije želja

  3. Funkcija se može mijenjati i dodijeliti varijabli
    Primjer:

    def dodaj (a, b):
    vrati a + b
    sum2nos = add # Ovdje je funkcija dodijeljena varijabli
    sum2nos (5,11)

    primjer3.py:

    Izlaz:
    >> primjer pythona3.py

  4. Definirajte funkciju unutar druge funkcije
    Primjer:

    def dodaj (a, b):
    def sum2 (a, b):
    vrati a + b
    res = zbroj2 (a, b)
    povratak res
    dodaj (10,15)

    primjer4.py:

    Izlaz:
    >> primjer pythona4.py

Zatvaranje:

Python omogućuje ugniježđenoj funkciji pristup vanjskom opsegu funkcije koja obuhvaća.

def pozdrav (poruka):
"Funkcija enclosonga"
def send_greeting ():
"Ugnježđena funkcija"
ispis (poruka)
poslati pozdrav()
pozdrav ("Dobro jutro")

primjer5.py:

Izlaz:

>> primjer pythona5.py

Nakon što sada razumijemo gornje koncepte, napisat ćemo primjer dekoratera.

Pr1: Ovdje ćemo ukrasiti funkciju poruke. Ispis poruke unutar **** bez izmjene izvorne funkcije, tj.e., funkcija poruke.

#decorator start
def print_msg (funkcija):
def omot ():
funkcija()
povratni omot
#dekorator kraj
def poruka ():
print ("Ovo je prvi primjer za demonstraciju dekoratora")
pozdrav = print_msg (poruka)
zdravo()

primjer6.py:

Izlaz:

>> primjer pythona6.py

U najjednostavnijem obliku, možemo postaviti dekorator na vrh definicije funkcije i pozvati funkciju kao što je prikazano dolje:

Ovdje god god želimo ukrasiti unutar ***, koristite ovaj ukrasitelj.

Izlaz:

Višestruki dekorator:

Možemo imati više dekoratera za jednu funkciju. Ovdje se dekorator primjenjuje redoslijedom koji smo pozvali.
sintaksa:
@ dekorator2
@ dekorator1
Definicija funkcije

Ovdje će se primijeniti 1., a zatim 2.

Prosljeđivanje argumenata funkcijama dekoratora:

Možemo proslijediti argumente funkciji omotača. Argumenti proslijeđeni funkciji za koju želimo ukrasiti.

Primjer:

def deco_wish (funkcija):
def omot (arg1, arg2):
print ('Proslijeđeni argumenti su', arg1, arg2)
ispis ('*********************')
funkcija (arg1, arg2)
ispis ('*********************')
povratni omot
@deco_wish
def želja (a1, a2):
ispis (a1, a2)
želja ('Dobro', 'Jutro')
želja ('Dobro', 'Popodne')

primjer7.py:

Izlaz:

>> primjer pythona7.py

Prosljeđivanje varijabilnog broja argumenata funkciji dekoratora:

Možemo proslijediti bilo koji broj argumenata koristeći * args (argumenti koji nisu ključne riječi poput brojeva) i ** kwargs (argumenti ključnih riječi poput rječnika). Oba su položajni argumenti i argumente pohranjuju u varijable args i kwargs.

Napomena: Ovdje možemo koristiti bilo koje ime umjesto args i kwargs, ali ta se imena preporučuju za upotrebu.

Primjer:

def dec_var_args (funkcija):
def omot (* args, ** kwargs):
print ('Argumenti koji nisu ključne riječi su', args)
print ('Argumenti ključne riječi su', kwargs)
funkcija (* argumenti)
povratni omot
@ dec_var_args
def fun_non_key_args (* args):
jer ja u svađama:
ispis (i)
@ dec_var_args
def fun_key_args ():
ispis ("Argumenti ključnih riječi")
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Math')

primjer8.py:

Izlaz:

>> primjer pythona8.py

Pr2: Pretpostavimo da imamo 2 funkcije
Funkcija1: Izračunajte zbroj brojeva s datog popisa
Funkcija2: Pomnožite svaki broj s 2 i dodajte ih na zadani popis brojeva
Ako želimo izračunati vrijeme potrebno za izvršenje, to možemo učiniti na 2 načina

  1. Postavite kôd između vremena početka i završetka svake funkcije
  2. Napišite dekorater za izračunavanje vremena

Pogledajte donji kod riješen pomoću dekoratera:

#decorator start
exe_time_calc (func):
def omot (arg):
start_time = datum i vrijeme.Datum vrijeme.sada()
func (arg)
end_time = datum i vrijeme.Datum vrijeme.sada()
print ("Vrijeme potrebno za izvršavanje funkcije" + func.__name__ + "je" + str (vrijeme_završetka - vrijeme_vrha))
povratni omot
#dekorator kraj
@exe_time_calc
def cal_avg (podaci):
zbroj = 0
za i u podacima:
zbroj + = i
print ("Prosjek datog popisa brojeva je", zbroj // len (podaci))
@exe_time_calc
def mul_by_2 (podaci):
zbroj = 0
za i u podacima:
zbroj + = + (i * 2)
print ("Zbir svih brojeva nakon pomnoženja s 2 je", zbroj)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

primjer9.py:

Izlaz:

>> primjer pythona9.py

Gornji uređivač može se koristiti za izračunavanje vremena izvršenja bilo koje funkcije. Korištenjem dekoratera možemo izbjeći ponavljanje koda kada imamo zahtjev za izračunavanjem vremena izvršenja da se dekorater postavi iznad definicije funkcije.

Zaključak:

Dekoratori mijenjaju funkcionalnost funkcije / metode bez mijenjanja izvornog koda funkcije koja se ukrašava. Koristeći ovo, možemo izbjeći pisanje ponovljenog koda. Poznavanje koncepta dekoratora učinit će nas jakim u pythonu. Dekorator možemo koristiti u sljedećim slučajevima:

Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...
Najpopularnije laboratorijske igre Oculus App
Ako ste vlasnik slušalica Oculus, tada morate biti sigurni u bočno učitavanje. Bočno učitavanje postupak je instaliranja nehranjenog sadržaja na vaše ...