Python-dekoratørvejledning: Sådan bruges dekoratører i Python

Denne artikel dækker begrebet dekoratør i python med en detaljeret vejledning, der inkluderer forskellige eksempler fra virkelige liv som fancy dekoratører osv.

Funktioner i python giver den optimale implementering af kørende logik af ethvert program, flere gange med problemfri udførelse. Dekoratører i python drejer sig også om begrebet I denne artikel vil vi gennemgå Dekoratører i detaljer inklusive forskellige eksempler i denne python-dekoratørvejledning. Følgende emner diskuteres i denne blog.



Hvad er funktioner i Python?

Dekoratører i Python er et avanceret emne. Så inden du går videre, skal du sørge for at være helt klar med begrebet pythonfunktioner. Der er et par forudsætninger, som man skal forstå, før man går videre til dekoratører i Python.



  • Første klasse Objekter

  • Indvendige funktioner



Førsteklasses objekter

I python behandles alt som et objekt inklusive alle datatyper , funktioner også. Derfor er en funktion også kendt som et førsteklasses objekt og kan overføres som argumenter.

Lad os se på et eksempel for at forstå, hvordan det fungerer.

def func1 (name): return f'Hello {name} 'def func2 (name): return f' {name}, Hvordan har du det? ' def func3 (func4): returner func4 ('Dear elev') print (func3 (func1)) print (func3 (func2))
 Produktion: Hej Kære elev Kære elev, hvordan har du det?

I ovenstående eksempel har vi brugt for at få navnet og bestået func1 og func2 som argument i func3.



Indvendige funktioner

I python er det muligt at definere funktioner inde i en funktion. Denne funktion kaldes en indre funktion. Her er et eksempel for at vise, hvordan vi kan bruge indre funktioner i python.

def func (): print ('first function') def func1 (): print ('first child function') def func2 (): print ('second child function') func1 () func2 () func ()
 Produktion: første funktion første barn funktion anden barn funktion

I ovenstående program er det ligegyldigt, hvordan barnets funktioner erklæres. Outputtet afhænger af, hvordan barnets funktioner udføres. De er lokaliseret med funk (), så de kan ikke kaldes separat.

Hvis du ringer til dem separat, får du en fejl, fordi de er gemt som variabler inde i func () og kan kun kaldes, hvis func () kaldes.

Returnering af en funktion fra en funktion

Det er muligt at returnere en funktion ved hjælp af en anden funktion. Se eksemplet nedenfor for at forstå dette.

def func (n): def func1 (): returner 'edureka' def func2 (): returner 'python' hvis n == 1: returnerer func1 andet: returnerer func2 a = func (1) b = func (2) print ( a ()) print (b ())
 Produktion: edureka python

Dekoratører i Python

Dekoratører i python er meget kraftfulde, som ændrer funktionsmåden for en funktion uden at ændre den permanent. Det omslutter grundlæggende en anden funktion, og da begge funktioner kan kaldes, returnerer den en kaldbar.

Efterhånden indpakker en dekoratør en funktion og ændrer dens adfærd. Lad os se på et simpelt eksempel for at forstå, hvordan vi kan arbejde med dekoratører i python.

def funktion1 (funktion): def wrapper (): print ('hej') funktion () print ('velkommen til python edureka') returner wrapper def funktion2 (): print ('Pythonista') funktion2 = funktion1 (funktion2) funktion2 ( )
 Produktion: hej pythonista velkommen til python edureka

For at gøre tingene lettere for programmørerne har vi et syntaktisk sukker med pythondekoratorer. Se på et eksempel nedenfor for at forstå, hvordan det fungerer.

def-funktion1 (funktion): def wrapper (): print ('hej') funktion () print ('how are you?') return wrapper @ function1 def-funktion2 (): print ('pythonista') -funktion2 ()
 Produktion: hej pythonista hvordan har du det?

Outputtet svarer til ovenstående program, den eneste forskel er, at vi har brugt pie-syntaksen med @ -symbolet.

Brug af dekoratører med argumenter

Når du har en funktion med argumenter, bliver det vanskeligere for dekoratørfunktionen, da den også har brug for argumenter i erklæringen. For at tackle dette kan vi bruge * args og ** kwargs i den indre indpakningsfunktion. Se på følgende eksempel for at forstå dette.

def funktion1 (funktion): def wrapper (* args, ** kwargs): print ('hej') funktion (* args, ** kwargs) print ('welcome to edureka') return wrapper @ function1 def function2 (navn): print (f '{name}') funktion2 ('pythonista')
 Produktion: hej pythonista velkommen til edureka

Returnering af værdier fra indrettede funktioner

Lad os se på et eksempel for at se, hvordan vi kan returnere en værdi fra en dekoreret funktion.

def funktion1 (funktion): def wrapper (* args, ** kwargs): funktion (* args, ** kwargs) print ('det fungerede') returner wrapper @ function1 def function2 (name): print (f '{name} ') funktion2 (' python ')
 Produktion: python det fungerede

Sørg for at returnere din indpakningsfunktion med argumenter for at undgå eventuelle fejl.

Fancy dekoratører i Python

Nu hvor vi ved, hvordan dekoratører fungerer i python, lad os udforske en ret kompleks funktion ved hjælp af et par eksempler.

maksimal bunkeimplementering i java

Klassedekoratører

Der er to måder at dekorere en klasse på python. Den første er, hvor du kan dekorere metoderne i en klasse, der er indbyggede dekoratører som @classmethod, @staticmethod og @property i python. @classmethod og @staticmethod definerer metoder inde i en klasse, der ikke er forbundet til nogen anden forekomst af en klasse. @property bruges normalt til at tilpasse getters og setterne til en klasseattribut. Lad os se på et eksempel for at forstå dette.

klasse Kvadrat: def __init __ (selv, side): self._side = side @ ejendom def side (self): returner self._side @ side.setter def side (self, værdi): hvis værdi & gt = 0: self._side = værdi ellers: print ('error') @ property def area (self): return self._side ** 2 @classmethod def unit_square (cls): return cls (1) s = Square (5) print (s.side) print (s.area)
 Produktion: 5 25

En anden måde at dekorere klassen på er at dekorere hele klassen. Lad os tage et eksempel for at forstå dette.

fra dataclasses importere dataclass @dataclass class Kort: rang: str suit: str

At dekorere en klasse reflekterer ikke over dens metoder. Det ligner næsten at skrive en dekoratør af en funktion, den eneste forskel er klassen i argumentet i stedet for en funktion.

Singleton klasse

En singleton-klasse har kun en forekomst. Der er masser af singletoner i python inklusive sand, ingen osv. Lad os se på et eksempel for at forstå dette bedre.

importer funktions def singleton (cls): @ functools.wraps (cls) def wrapper (* args, ** kwargs): hvis ikke wrapper.instance: wrapper.instance = cls (* args, ** kwargs) return wrapper.instance wrapper .instance = Intet returemballage @singleton klasse Én: bestå først = Én () anden = Én () udskrift (første er anden)
 Produktion: Sand

Brug af 'is' returnerer kun sandt for objekter, der er den samme forekomst. Ovenstående eksempel bruger den samme tilgang som enhver anden funktionsdekorator. Den eneste forskel er, at vi har brugt cls i stedet for funktion. Også det første og det andet er nøjagtigt den samme forekomst.

Indlejrende dekoratører

Du kan bruge flere dekoratører ved at stable dem oven på hinanden. Lad os tage et eksempel for at forstå, hvordan dette fungerer.

@ funktion1 @ funktion2 def funktion (navn): udskriv (f '{navn}')

Sådan kan vi bruge indlejrede dekoratører ved at stable dem på hinanden. I ovenstående eksempel er det kun en skildring, for at det skal fungere, skal du definere funktion1 og funktion2 med indpakningsfunktioner inde i hver af dem.

Argumenter i en dekoratør

Det er altid nyttigt at føre argumenter i en dekoratør. Lad os overveje følgende eksempel.

import funktions def def (num): def decorator_repeat (func): @ functools.wraps (func) def wrapper (* args, ** kwargs): for _ in range (num): value = func (* args, ** kwargs ) returværdi returindpakning retur dekorator_repeat @repeat (num = 4) def-funktion (navn): print (f '{name}') -funktion ('python')
 Produktion: python python python python

Dette bringer os til slutningen af ​​denne artikel, hvor vi har lært, hvordan vi kan bruge Decorator i Python med eksempler. Jeg håber, du er klar over alt, hvad der er blevet delt med dig i denne Python Decorator Tutorial

Hvis du fandt denne artikel om 'Python Decorator Tutorial' relevant, skal du tjekke et betroet online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden.

Vi er her for at hjælpe dig med hvert trin på din rejse og komme med en læseplan, der er designet til studerende og fagfolk, der ønsker at være en . Kurset er designet til at give dig et forspring i Python-programmering og træne dig til både kerne- og avancerede Python-koncepter sammen med forskellige synes godt om

Hvis du støder på spørgsmål, er du velkommen til at stille alle dine spørgsmål i kommentarfeltet i 'Python Decorator Tutorial', og vores team vil med glæde svare.