Python

Pythoni sisekujundajad

Pythoni sisekujundajad
Selles artiklis käsitleme Pythoni sisekujundajaid.

Definitsioon: Decorator on Pythoni kujundusmuster. See on funktsioon, mis võtab argumendina mõne muu funktsiooni, lisab sellele funktsionaalsust seda muutmata ja tagastab teise funktsiooni.

Seda nimetatakse "(@)" abil ja see asetatakse enne funktsiooni määratlemist, mida soovime kaunistada.

süntaks:

@decoratori nimi
Funktsiooni määratlus

Kaunistajate mõistmiseks peame teadma järgmisi mõisteid.
Funktsioonid on esmaklassilised objektid. See tähendab, et funktsiooni saab edastada argumendina, selle saab tagastada teisest funktsioonist, saab määrata muutujale, saab määratleda teises funktsioonis. Parema mõistmise huvides vaadake allpool toodud näiteid.

  1. Funktsiooni saab edastada argumendina
    Nt:

    def juurdekasv (n):
    tagastage n + 1
    def demo_funcall (funktsioon):
    arv = 5
    tagastamisfunktsioon (arv)
    demo_funcall (juurdekasv)

    Siin edastatakse argumendina juurdekasvu funktsioon

    näide1.py:

    Väljund:

    >> pythoni näide1.py

  2. Funktsiooni saab tagastada teisest funktsioonist
    Nt:

    def soov ():
    def say_wish ():
    tagasi "Palju õnne sünnipäevaks"
    tagasi ütle_soov
    tere = soov ()
    Tere()

    näide2.py:

    Väljund:

    >> pythoni näide2.py

    Funktsioon say_wish naasis siin soovifunktsioonist

  3. Funktsiooni saab muuta ja määrata muutujale
    Nt:

    def lisama (a, b):
    tagastage a + b
    sum2nos = add # Muutujale määratud funktsioon add
    sum2nos (5,11)

    näide3.py:

    Väljund:
    >> pythoni näide3.py

  4. Määrake funktsioon teise funktsiooni sees
    Nt:

    def lisama (a, b):
    def summa2 (a, b):
    tagastage a + b
    res = summa2 (a, b)
    tagastama res
    lisa (10,15)

    näide4.py:

    Väljund:
    >> pythoni näide4.py

Sulgemine:

Python võimaldab pesastatud funktsioonil pääseda juurde piirava funktsiooni välisele ulatusele.

def tervitus (sõnum):
"Enclosong funktsioon"
def send_greeting ():
"Pesastatud funktsioon"
print (sõnum)
saatke_tervitus ()
tervitus ("Tere hommikust")

näide5.py:

Väljund:

>> pythoni näide5.py

Pärast ülaltoodud mõistete mõistmist kirjutame dekoraatori näite.

Ex1: Siin me kaunistame sõnumi funktsiooni. Sõnumi printimine **** sisse ilma algset funktsiooni muutmata, st.e., sõnumi funktsioon.

#dekoraatori algus
def print_msg (funktsioon):
def ümbris ():
funktsioon ()
tagastuspakend
#dekoraatori lõpp
def sõnum ():
print ("See on esimene näide dekoraatori demonstreerimiseks")
tere = print_msg (sõnum)
Tere()

näide6.py:

Väljund:

>> pythoni näide6.py

Lihtsamas vormis saame funktsiooni määratluse peale asetada dekoraatori ja kutsuda funktsiooni, nagu allpool näidatud:

Siin kasutage seda dekoraatorit, olenemata stringist, mida me tahame sisemuses kaunistada ***.

Väljund:

Mitu sisekujundajat:

Meil võib ühe funktsiooni jaoks olla mitu dekoraatorit. Siin rakendatakse dekoraator meie kutsutud järjekorras.
süntaks:
@ dekoraator2
@ dekoraator1
Funktsiooni määratlus

Siin rakendatakse 1. dekoraatorit, seejärel 2. dekoraatorit.

Argumentide edastamine dekoraatori funktsioonidele:

Võime argumendid edastada ümbrisfunktsioonile. Argumendid edastati funktsioonile, mille jaoks me tahame kaunistada.

Nt:

def deco_wish (funktsioon):
def ümbris (arg1, arg2):
print ('Edastatud argumendid on', arg1, arg2)
print ('**********************')
funktsioon (arg1, arg2)
print ('*********************')
tagastuspakend
@deco_wish
def soov (a1, a2):
print (a1, a2)
soov ('hea', 'hommik')
soov ('hea', 'pärastlõuna')

näide7.py:

Väljund:

>> pythoni näide7.py

Muutuva arvu argumentide edastamine sisustusfunktsioonile:

Saame edastada suvalise arvu argumente, kasutades * args (märksõnadeta argumendid nagu numbrid) ja ** kwargs (märksõna argumendid nagu sõnastik). Mõlemad on positsioonilised argumendid ja salvestavad argumendid argide ja kwargsi muutujatesse.

Märkus. Siin võime argide ja kwargide asemel kasutada mis tahes nime, kuid neid nimesid on soovitatav kasutada.

Nt:

def dec_var_args (funtion):
def ümbris (* args, ** kwargs):
print ('Märksõnavälised argumendid on', args)
print ('Märksõna argumendid on', kwargs)
funktsioon (* args)
tagastuspakend
@ dec_var_args
def fun_non_key_args (* args):
minu jaoks argides:
trükk (i)
@ dec_var_args
def fun_key_args ():
print (“Märksõna argumendid”)
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Math')

näide8.py:

Väljund:

>> pythoni näide8.py

Ex2: Oletame, et meil on 2 funktsiooni
Funktsioon1: arvutage antud loendi arvude summa
Funktsioon2: korrutage iga number kahega ja lisage need antud numbrite loendisse
Kui tahame arvutada, kui palju aega igaüks nende täitmiseks võtab, saame seda teha kahel viisil

  1. Asetage kood igas funktsioonis algus- ja lõppaja vahele
  2. Kirjutage dekoraator aja arvutamiseks

Vaadake allpool dekoraatori abil lahendatud koodi:

#dekoraatori algus
exe_time_calc (func):
def ümbris (arg):
algusaeg = kuupäevaeg.kuupäev Kellaaeg.nüüd ()
funk (arg)
end_time = kuupäevaeg.kuupäev Kellaaeg.nüüd ()
print ("Funktsiooni käivitamiseks kuluv aeg" + func.__nimi__ + "on" + str (lõpp-aeg - lõpp-aeg))
tagastuspakend
#dekoraatori lõpp
@exe_time_calc
def cal_avg (andmed):
summa = 0
i jaoks andmetes:
summa + = i
print ("Antud numbriloendi keskmine on", summa // len (andmed))
@exe_time_calc
def mul_by_2 (andmed):
summa = 0
i jaoks andmetes:
summa + = + (i * 2)
print ("Kõigi arvude summa pärast 2-ga korrutamist on", summa)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

näide9.py:

Väljund:

>> pythoni näide9.py

Ülaltoodud dekoraatorit saab kasutada mis tahes funktsiooni täitmisaja arvutamiseks. Dekoraatori abil saame vältida korduvat koodi, kui meil on nõue täitmisaja arvutamiseks, et dekoraator asetada funktsiooni määratlusest kõrgemale.

Järeldus:

Sisekujundajad muudavad funktsiooni / meetodi funktsionaalsust muutmata funktsiooni originaalkoodi. Seda kasutades saame vältida korduva koodi kirjutamist. Kaunistaja kontseptsiooni tundmine muudab meid pythonis tugevaks. Dekoraatorit saame kasutada järgmistel juhtudel:

Kuidas kasutada Xdotooli hiireklõpsude ja klahvivajutuste stimuleerimiseks Linuxis
Xdotool on tasuta ja avatud lähtekoodiga käsurea tööriist hiireklõpsude ja klahvivajutuste simuleerimiseks. See artikkel hõlmab lühikest juhendit xdot...
Viis parimat ergonoomilist arvutihiiretoodet Linuxile
Kas pikaajaline arvuti kasutamine põhjustab valu randmes või sõrmedes?? Kas teil on liigeste jäikus ja peate pidevalt käsi suruma? Kas tunnete põletav...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...