Piton

Python díszítők

Python díszítők
Ebben a cikkben a Python Decoratorokat fogjuk megvitatni.

Meghatározás: A Decorator egy mintázat a Pythonban. Ez egy olyan függvény, amely egy másik függvényt vesz fel argumentumként, hozzáad néhány funkciót anélkül, hogy módosítaná, és egy másik függvényt ad vissza.

Ezt hívjuk „(@)” használatával, és a díszíteni kívánt funkció meghatározása előtt helyezzük el.

szintaxis:

@dekorátor neve
Funkció meghatározása

A dekorátorok megértéséhez ismerni kell az alábbi fogalmakat.
A függvények első osztályú objektumok. Ez azt jelenti, hogy egy függvény átadható argumentumként, visszaadható egy másik függvényből, hozzárendelhető egy változóhoz, meghatározható egy másik függvényben. A jobb megértés érdekében lásd az alábbi példákat.

  1. Egy függvény átadható argumentumként
    Volt:

    def növekmény (n):
    n + 1 visszatérés
    def demo_funcall (függvény):
    szám = 5
    visszatérési függvény (szám)
    demo_funcall (növekmény)

    Itt az inkrement függvény érvként került átadásra

    példa1.py:

    Kimenet:

    >> python példa1.py

  2. A függvény visszaadható egy másik függvényből
    Volt:

    def kívánság ():
    def say_wish ():
    return "Boldog születésnapot"
    return say_wish
    szia = kívánság ()
    Helló()

    példa2.py:

    Kimenet:

    >> python példa2.py

    Itt a say_wish függvény visszatért a kívánságfüggvényből

  3. A függvény módosítható és hozzárendelhető egy változóhoz
    Volt:

    def add (a, b):
    adja vissza a + b
    sum2nos = add # Itt a változóhoz hozzárendelt add függvény
    sum2nos (5,11)

    3. példa.py:

    Kimenet:
    >> python példa3.py

  4. Adja meg a függvényt egy másik függvényen belül
    Volt:

    def add (a, b):
    def sum2 (a, b):
    adja vissza a + b
    res = összeg2 (a, b)
    return res
    hozzáadás (10,15)

    4. példa.py:

    Kimenet:
    >> python példa4.py

Bezárás:

A Python lehetővé teszi, hogy egy beágyazott függvény hozzáférjen a mellékelő függvény külső hatóköréhez.

def üdvözlet (üzenet):
"Enclosong Function"
def send_greeting ():
"Beágyazott funkció"
nyomtatás (üzenet)
send_greeting ()
üdvözlet ("Jó reggelt")

5. példa.py:

Kimenet:

>> python példa5.py

Miután megértette a fenti fogalmakat, írunk egy dekoratőr példát.

Ex1: Itt díszítjük az üzenet funkciót. Az üzenet nyomtatása a **** belsejében az eredeti funkció módosítása nélkül, i.e., üzenet funkció.

#dekorátor kezdete
def print_msg (függvény):
def burkoló ():
funkció()
visszatérő burkolat
#dekorátor vége
def üzenet ():
nyomtatás („Ez az első példa a dekoratőr bemutatására”)
hello = print_msg (üzenet)
Helló()

6. példa.py:

Kimenet:

>> python példa6.py

A legegyszerűbb formában elhelyezhetünk dekoratort a függvénydefiníció tetején, és meghívhatjuk a függvényt az alábbiak szerint:

Bármelyik húrt szeretnénk belül díszíteni ***, használja ezt a dekoratort.

Kimenet:

Több dekoratőr:

Több dekorátor is rendelkezhetünk egyetlen funkcióval. Itt a dekoratort az általunk hívott sorrendben alkalmazzák.
szintaxis:
@ dekoratőr2
@ dekoratőr1
Funkció meghatározása

Itt az 1. dekoratort, majd a 2. dekoratort alkalmazzák.

Argumentumok átadása a dekorátor funkcióinak:

Átadhatunk argumentumokat a wrapper függvénynek. Az argumentumok átadódtak annak a függvénynek, amelyet díszíteni szeretnénk.

Volt:

def deco_wish (függvény):
def burkoló (arg1, arg2):
print ('Az átadott argumentumok:', arg1, arg2)
nyomtatás ('**********************')
függvény (arg1, arg2)
nyomtatás ('**********************')
visszatérő burkolat
@deco_wish
def kívánság (a1, a2):
nyomtatás (a1, a2)
kívánság ('Jó', 'Reggel')
kívánság ('Jó', 'Délután')

7. példa.py:

Kimenet:

>> python példa7.py

Változó számú argumentum átadása a dekorátor funkciónak:

Bármely argumentumot átadhatunk * args (Nem kulcsszó argumentumok, mint a számok) és ** kwargs (kulcsszó argumentumok, mint egy szótár) használatával. Mindkettő helyzeti argumentum, és az argumentumokat args és kwargs változókban tárolja.

Megjegyzés: Itt bármilyen nevet használhatunk args és kwargs helyett, de ezeknek a neveknek a használata ajánlott.

Volt:

def dec_var_args (funtion):
def burkoló (* args, ** kwargs):
print ('A nem kulcsszó argumentumok', args)
print ('A kulcsszó argumentumai:', kwargs)
függvény (* arg)
visszatérő burkolat
@ dec_var_args
def fun_non_key_args (* args):
mert én argszban:
nyomtatás (i)
@ dec_var_args
def fun_key_args ():
nyomtatás („Kulcsszó-érvek”)
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Math')

8. példa.py:

Kimenet:

>> python példa8.py

Ex2: Tegyük fel, hogy 2 funkciónk van
Funkció1: Számítsa ki a számok összegét az adott listából
Funkció2: Minden számot szorozzon meg 2-vel, és vegye fel őket a megadott számlistára
Ha ki akarjuk számolni az egyes végrehajtáshoz szükséges időt, akkor ezt kétféleképpen tehetjük meg

  1. Helyezze a kódot az egyes funkciók kezdési és befejezési időpontja közé
  2. Írjon dekoratort az idő kiszámításához

Lásd az alábbiakban a dekorátorral megoldott kódot:

#dekorátor kezdete
exe_time_calc (func):
def burkoló (arg):
start_time = dátumidő.dátum idő.Most()
func (arg)
end_time = dátumidő.dátum idő.Most()
print ("A függvény végrehajtásának ideje" + func.__name__ + "is" + str (end_time - end_time))
visszatérő burkolat
#dekorátor vége
@exe_time_calc
def cal_avg (adatok):
összeg = 0
i-re az adatokban:
összeg + = i
print ("A megadott számlista átlaga:", összeg // len (adatok))
@exe_time_calc
def mul_by_2 (adatok):
összeg = 0
i-re az adatokban:
összeg + = + (i * 2)
print ("Az összes szám összege 2-gyel való szorzás után", összeg)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

9. példa.py:

Kimenet:

>> python példa9.py

A fenti dekorátor bármely funkció végrehajtási idejének kiszámításához használható. Dekorátor használatával elkerülhetjük az ismételt kódot, ha követelményünk van a végrehajtási idő kiszámítására, hogy a dekorátort a funkciódefiníció fölé helyezzük.

Következtetés:

A dekorátorok megváltoztatják egy függvény / módszer funkcionalitását anélkül, hogy megváltoztatnák a függvény eredeti kódját. Ennek használatával elkerülhetjük az ismételt kódírást. A dekoratőr koncepciójának ismeretében erősek leszünk a pythonban. A dekoratort az alábbi esetekben használhatjuk:

Az Xdotool használata az egérkattintások és a billentyűleütések ösztönzéséhez Linux alatt
Az Xdotool egy ingyenes és nyílt forráskódú parancssori eszköz az egérkattintások és a billentyűleütések szimulálására. Ez a cikk egy rövid útmutatót ...
A top 5 ergonómikus számítógépes egértermék Linuxhoz
Hosszan tartó számítógép-használat okoz-e fájdalmat a csuklóján vagy az ujjain?? Merev ízületek szenvednek, és folyamatosan kezet kell rázniuk? Égő fá...
Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...