Python

Python-sisustajat

Python-sisustajat
Tässä artikkelissa aiomme keskustella Python-sisustajista.

Määritelmä: Decorator on Pythonin suunnittelumalli. Se on funktio, joka ottaa toisen funktion argumenttina, lisää siihen jonkin toiminnon muokkaamatta sitä ja palauttaa toisen funktion.

Tätä kutsutaan "(@)" -toiminnoksi ja se sijoitetaan ennen funktion määrittelemistä, jonka haluamme koristaa.

syntaksi:

@koristelijan nimi
Toiminnon määrittely

Sisustajien ymmärtämiseksi meidän on tunnettava alla olevat käsitteet.
Funktiot ovat ensiluokkaisia ​​esineitä. Se tarkoittaa, että funktio voidaan välittää argumenttina, se voidaan palauttaa toisesta funktiosta, voidaan määrittää muuttujalle, voidaan määritellä toisessa toiminnossa. Saadaksesi paremman käsityksen, katso alla olevat esimerkit.

  1. Funktio voidaan välittää argumenttina
    Esim .:

    def-lisäys (n):
    paluu n + 1
    def demo_funcall (toiminto):
    numero = 5
    palautustoiminto (numero)
    demo_funcall (lisäys)

    Tässä lisäysfunktio välitettiin argumenttina

    esimerkki 1.py:

    Tuotos:

    >> python-esimerkki 1.py

  2. Toiminto voidaan palauttaa toisesta toiminnosta
    Esim .:

    def toive ():
    def say_wish ():
    palauta "Hyvää syntymäpäivää"
    palauta say_wish
    hei = toive ()
    Hei()

    esimerkki 2.py:

    Tuotos:

    >> python-esimerkki2.py

    Täällä say_wish-funktio palasi toive-funktiosta

  3. Toimintoa voidaan muokata ja määrittää muuttujalle
    Esim .:

    def lisää (a, b):
    palauta a + b
    sum2nos = add # Muuttujalle määritetty funktio add
    sum2nos (5,11)

    esimerkki 3.py:

    Tuotos:
    >> python-esimerkki 3.py

  4. Määritä toiminto toisen toiminnon sisällä
    Esim .:

    def lisää (a, b):
    def summa2 (a, b):
    palauta a + b
    res = summa2 (a, b)
    palauta res
    lisää (10,15)

    esimerkki 4.py:

    Tuotos:
    >> python-esimerkki 4.py

Päättäminen:

Python sallii sisäkkäisen toiminnon käyttää sulkeutuvan toiminnon ulompaa laajuutta.

def-tervehdys (viesti):
"Enclosong-toiminto"
def send_greeting ():
"Sisäkkäinen toiminto"
tulosta (viesti)
Lähetä tervehdys()
tervehdys ("hyvää huomenta")

esimerkki 5.py:

Tuotos:

>> python-esimerkki 5.py

Kun olemme ymmärtäneet yllä olevat käsitteet, kirjoitamme esimerkin sisustajasta.

Ex1: Tässä koristelemme viestitoimintoa. Viestin tulostaminen **** sisällä muuttamatta alkuperäistä toimintoa, ts.e., viestitoiminto.

#koristelijan alku
def print_msg (toiminto):
def kääre ():
toiminto ()
paluu kääre
#koristeen loppu
def-viesti ():
tulosta ("Tämä on ensimmäinen esimerkki koristelijan esittelystä")
hei = print_msg (viesti)
Hei()

esimerkki 6.py:

Tuotos:

>> python-esimerkki 6.py

Yksinkertaisimmassa muodossa voimme sijoittaa sisustajan funktion määritelmän päälle ja kutsua funktion alla olevan kuvan mukaisesti:

Täällä mikä tahansa merkkijono, jonka haluamme koristella sisällä ***, käytä tätä sisustajaa.

Tuotos:

Useita sisustajia:

Meillä voi olla useita sisustajia yhdelle toiminnolle. Tässä sisustajaa käytetään siinä järjestyksessä kuin me kutsumme.
syntaksi:
@ sisustaja2
@ sisustaja1
Toiminnon määrittely

Tässä käytetään ensimmäistä koristajaa ja sitten toista koristajaa.

Argumenttien välittäminen sisustustoiminnoille:

Voimme välittää argumentit käärefunktiolle. Argumentit siirretään funktiolle, jota haluamme koristaa.

Esim .:

def deco_wish (funktio):
def-kääre (arg1, arg2):
tulosta ('Hyväksytyt argumentit ovat', arg1, arg2)
Tulosta ('*********************')
funktio (arg1, arg2)
Tulosta ('*********************')
paluu kääre
@deco_wish
def toive (a1, a2):
tulosta (a1, a2)
toive ('Hyvä', 'Aamu')
toive ('Hyvä', 'Iltapäivä')

esimerkki 7.py:

Tuotos:

>> python-esimerkki 7.py

Siirrä muuttuja argumentteja lukijalle:

Voimme välittää minkä tahansa määrän argumentteja käyttämällä * args (ei-avainsana-argumentit kuten numerot) ja ** kwargs (avainsana-argumentit kuten sanakirja). Molemmat ovat sijaintiargumentteja ja tallentavat argumentit args- ja kwargs-muuttujiin.

Huomaa: Tässä voimme käyttää mitä tahansa nimeä argien ja kwargien sijaan, mutta näitä nimiä suositellaan käytettäväksi.

Esim .:

def dec_var_args (funtion):
def-kääre (* args, ** kwargs):
tulosta ('Ei-avainsana-argumentit ovat', argumentit)
tulosta ('Avainsana-argumentit ovat', kwargs)
funktio (* args)
paluu kääre
@ dec_var_args
def fun_non_key_args (* argumentit):
sillä minä argumenteissa:
tulosta (i)
@ dec_var_args
def fun_key_args ():
tulosta (“Avainsana-argumentit”)
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Math')

esimerkki 8.py:

Tuotos:

>> python-esimerkki 8.py

Ex2: Oletetaan, että meillä on 2 toimintoa
Funktio1: Laske numeroiden summa annetusta luettelosta
Tehtävä 2: Kerro jokainen numero kahdella ja lisää ne annettuun numeroluetteloon
Jos haluamme laskea kunkin suorittamiseen kuluneen ajan, voimme tehdä sen kahdella tavalla

  1. Aseta koodi alkamis- ja lopetusajan väliin jokaisessa toiminnossa
  2. Kirjoita koristelija ajan laskemiseksi

Katso alla oleva koodi, joka on ratkaistu sisustajalla:

#koristelijan alku
exe_time_calc (func):
def kääre (arg):
aloitusaika = päivämäärä.treffiaika.nyt()
func (arg)
end_time = päivämäärä.treffiaika.nyt()
tulosta ("Toiminnon suorittamiseen kuluva aika" + funktio.__nimi__ + "on" + str (end_time - end_time))
paluu kääre
#koristeen loppu
@exe_time_calc
def cal_avg (data):
summa = 0
i: lle tiedoissa:
summa + = i
tulosta ("Annetun numeroluettelon keskiarvo on", summa // len (data))
@exe_time_calc
def mul_by_2 (data):
summa = 0
i: lle tiedoissa:
summa + = + (i * 2)
tulosta ("Kaikkien numeroiden summa kertomalla 2: lla on", summa)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

esimerkki9.py:

Tuotos:

>> python-esimerkki 9.py

Yllä olevaa koristelijaa voidaan käyttää minkä tahansa toiminnon suoritusajan laskemiseen. Sisustajan avulla voimme välttää toistuvan koodin, kun tarvitsemme suoritusajan laskemisen, jotta sisustaja asetettaisiin funktion määritelmän yläpuolelle.

Päätelmä:

Sisustajat muuttavat toiminnon / menetelmän toiminnallisuutta muuttamatta koristellun toiminnon alkuperäistä koodia. Tämän avulla voimme välttää toistuvan koodin kirjoittamisen. Sisustajakonseptin tunteminen tekee meistä vahvoja pythonissa. Voimme käyttää sisustajaa seuraavissa tapauksissa:

WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
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...