Python

Python dekoratori

Python dekoratori
Šajā rakstā mēs apspriedīsim Python dekorētājus.

Definīcija: Dekorators ir Python dizaina modelis. Tā ir funkcija, kas kā argumentu ņem citu funkciju, pievieno tai kādu funkcionalitāti, to nemodificējot, un atgriež citu funkciju.

To sauc par “(@)” un ievieto pirms funkcijas, kuru mēs vēlamies izrotāt, definēšanas.

sintakse:

@dekoratora vārds
Funkcijas definīcija

Lai saprastu dekoratorus, mums jāzina tālāk minētie jēdzieni.
Funkcijas ir pirmās klases objekti. Tas nozīmē, ka funkciju var nodot kā argumentu, to var atgriezt no citas funkcijas, to var piešķirt mainīgajam, var definēt citā funkcijā. Lai labāk izprastu, skatiet zemāk redzamos piemērus.

  1. Funkciju var nodot kā argumentu
    Piem .:

    def pieaugums (n):
    atgriešanās n + 1
    def demo_funcall (funkcija):
    skaitlis = 5
    atgriešanās funkcija (num)
    demo_funcall (pieaugums)

    Šeit pieauguma funkcija nodota kā arguments

    piemērs1.py:

    Izeja:

    >> pitona piemērs.py

  2. Funkciju var atgriezt no citas funkcijas
    Piem .:

    def vēlas ():
    def say_wish ():
    atgriešanās "Daudz laimes dzimšanas dienā"
    atgriezties say_wish
    sveiki = vēlme ()
    Sveiki()

    2. piemērs.py:

    Izeja:

    >> pitona piemērs2.py

    Funkcija say_wish atgriezās no vēlmju funkcijas

  3. Funkciju var mainīt un piešķirt mainīgajam
    Piem .:

    def pievienot (a, b):
    atgriezt a + b
    sum2nos = pievienot # Šeit funkcija pievienot, kas piešķirta mainīgajam
    sum2nos (5,11)

    3. piemērs.py:

    Izeja:
    >> pitona piemērs3.py

  4. Definējiet funkciju citas funkcijas iekšpusē
    Piem .:

    def pievienot (a, b):
    def summa2 (a, b):
    atgriezt a + b
    res = summa2 (a, b)
    atgriešanās rez
    pievienot (10,15)

    4. piemērs.py:

    Izeja:
    >> pitona piemērs.py

Slēgšana:

Python ļauj ligzdotajai funkcijai piekļūt norobežojošās funkcijas ārējai darbības jomai.

def sveiciens (ziņojums):
"Enclosong funkcija"
def send_greeting ():
"Ligzdota funkcija"
izdrukāt (ziņojumu)
send_greeting ()
sveiciens ("Labrīt")

5. piemērs.py:

Izeja:

>> pitona piemērs.py

Pēc tam, kad tagad esat sapratis iepriekš minētos jēdzienus, mēs uzrakstīsim dekoratora piemēru.

Ex1: Šeit mēs izrotāsim ziņojuma funkciju. Ziņojuma drukāšana iekšpusē ****, nemainot sākotnējo funkciju, t.e., ziņojuma funkcija.

#dekoratora sākums
def print_msg (funkcija):
def iesaiņotājs ():
funkcija ()
atgriešanās iesaiņojums
#dekoratora beigas
def ziņojums ():
drukāt (“Šis ir pirmais dekoratora demonstrēšanas piemērs”)
labdien = print_msg (ziņa)
Sveiki()

6. piemērs.py:

Izeja:

>> pitona piemērs.py

Vienkāršākajā formā mēs varam novietot dekoratoru virs funkcijas definīcijas un izsaukt funkciju, kā parādīts zemāk:

Izmantojiet šo dekoratoru neatkarīgi no tā, kādu stīgu mēs vēlamies izrotāt iekšpusē ***.

Izeja:

Vairāki dekoratori:

Mums var būt vairāki dekoratori vienai funkcijai. Šeit dekorators tiek uzklāts tādā secībā, kādā mēs to saucām.
sintakse:
@ dekorators2
@ dekorators1
Funkcijas definīcija

Šeit tiks izmantots 1. dekorators, pēc tam 2. dekorators.

Argumentu nodošana dekoratora funkcijām:

Mēs varam nodot argumentus iesaiņošanas funkcijai. Argumenti, kas nodoti funkcijai, kuru mēs vēlamies izrotāt.

Piem .:

def deco_wish (funkcija):
def iesaiņotājs (arg1, arg2):
drukāt ('nodotie argumenti ir', arg1, arg2)
drukāt ('**********************')
funkcija (arg1, arg2)
drukāt ('**********************')
atgriešanās iesaiņojums
@deco_wish
def vēlme (a1, a2):
drukāt (a1, a2)
vēlējums (“Labs”, “Rīts”)
vēlējums ('Labi', 'Pēcpusdiena')

7. piemērs.py:

Izeja:

>> pitona piemērs.py

Dodiet mainīgā argumentu skaitu dekoratora funkcijai:

Mēs varam nodot jebkuru argumentu skaitu, izmantojot * args (argumenti, kas nav atslēgvārdi, piemēram, skaitļi) un ** kwargs (atslēgvārdu argumenti, piemēram, vārdnīca). Abi ir pozicionālie argumenti, un argumentus saglabā args un kwargs mainīgajos.

Piezīme: Šeit mēs varam izmantot jebkuru vārdu args un kwargs vietā, taču šos nosaukumus ieteicams izmantot.

Piem .:

def dec_var_args (funtion):
def iesaiņotājs (* args, ** kwargs):
drukāt (“Argumenti, kas nav atslēgvārdi, ir”, argumenti)
print ('Atslēgvārda argumenti ir', kwargs)
funkcija (* args)
atgriešanās iesaiņojums
@ dec_var_args
def fun_non_key_args (* args):
jo es argos:
drukāt (i)
@ dec_var_args
def fun_key_args ():
drukāt (“Atslēgvārdu argumenti”)
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Math')

8. piemērs.py:

Izeja:

>> pitona piemērs.py

Ex2: Pieņemsim, ka mums ir 2 funkcijas
Funkcija1: aprēķiniet skaitļu summu no norādītā saraksta
Funkcija2: reiziniet katru skaitli ar 2 un pievienojiet tos norādītajam skaitļu sarakstam
Ja mēs vēlamies aprēķināt katra izpildei nepieciešamo laiku, to var izdarīt divos veidos

  1. Katrā funkcijā ievietojiet kodu starp sākuma un beigu laiku
  2. Rakstiet dekoratoru laika aprēķināšanai

Skatīt kodu, kas atrisināts, izmantojot dekoratoru:

#dekoratora sākums
exe_time_calc (func):
def iesaiņotājs (arg):
sākuma_ laiks = datuma laiks.datums Laiks.tagad ()
func (arg)
end_time = datuma laiks.datums Laiks.tagad ()
print ("Funkcijas izpildes laiks" + func.__name__ + "ir" + str (end_time - end_time))
atgriešanās iesaiņojums
#dekoratora beigas
@exe_time_calc
def cal_avg (dati):
summa = 0
i datiem:
summa + = i
drukāt ("Dotā skaitļu vidējais rādītājs ir", summa // len (dati))
@exe_time_calc
def mul_by_2 (dati):
summa = 0
i datiem:
summa + = + (i * 2)
drukāt ("Visu skaitļu summa pēc reizināšanas ar 2 ir", summa)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

9. piemērs.py:

Izeja:

>> pitona piemērs.py

Iepriekš minēto dekoratoru var izmantot, lai aprēķinātu izpildes laiku jebkurai no funkcijām. Izmantojot dekoratoru, mēs varam izvairīties no atkārtota koda, kad mums ir prasība aprēķināt izpildes laiku, lai dekoratoru novietotu virs funkcijas definīcijas.

Secinājums:

Dekoratori maina funkcijas / metodes funkcionalitāti, nemainot dekorējamās funkcijas sākotnējo kodu. Izmantojot to, mēs varam izvairīties no atkārtota koda rakstīšanas. Zinot dekoratora koncepciju, mēs kļūsim spēcīgi pitonā. Dekoratoru mēs varam izmantot šādos gadījumos:

Labākās Linux spēļu gamepad kartēšanas lietotnes
Ja jums patīk spēlēt spēles Linux ar parastu tastatūru, nevis parasto tastatūru un peles ievades sistēmu, jums ir dažas noderīgas lietotnes. Daudzas d...
Noderīgi rīki Linux spēlētājiem
Ja jums patīk spēlēt spēles Linux, iespējams, ka spēļu pieredzes uzlabošanai, iespējams, esat izmantojis tādas lietotnes un utilītprogrammas kā Wine, ...
HD Remastered spēles operētājsistēmai Linux, kurām nekad agrāk nebija Linux laidiena
Daudzi spēļu izstrādātāji un izdevēji nāk klajā ar veco spēļu HD remaster, lai pagarinātu franšīzes darbības laiku. Lūdzu, faniem, kas pieprasa saderī...