Les funcions en python proporcionen la implementació optimitzada de la lògica d’execució de qualsevol programa, diverses vegades amb una execució sense problemes. Els decoradors en pitó també giren al voltant del concepte de En aquest article, revisarem el Decoradors detalladament, inclosos diversos exemples en aquest tutorial de decorador de pitó. Els següents temes es tracten en aquest bloc.
Què són les funcions de Python?
Els decoradors de Python són un tema avançat. Abans de continuar, assegureu-vos que teniu clar el concepte de funcions python. Hi ha alguns requisits previs que cal entendre abans de passar als decoradors de Python.
Primera classe Objectes
Funcions interiors
Objectes de primera classe
A Python, tot es tracta com un objecte incloent tots els fitxers tipus de dades , funcions també. Per tant, una funció també es coneix com a objecte de primera classe i es pot transmetre com a arguments.
Vegem un exemple per entendre com funciona.
què fa un desenvolupador de iOS
def func1 (name): return f'Hello {name} 'def func2 (name): return f' {name}, How doin? ' def func3 (func4): return func4 ('Dear learnner') print (func3 (func1)) print (func3 (func2))
Sortida: Hola Benvolgut aprenent Benvolgut aprenent, com ho fas?
A l'exemple anterior, hem utilitzat el fitxer per obtenir el nom i passar func1 i func2 com a argument a func3.
Funcions interiors
A Python, és possible definir funcions dins d’una funció. Aquesta funció s’anomena funció interna. Aquí hi ha un exemple per mostrar com podem utilitzar les funcions interiors a Python.
def func (): print ('primera funció') def func1 (): print ('primera funció secundària') def func2 (): print ('segona funció secundària') func1 () func2 () func ()
Sortida: primera funció primera funció secundària segona funció secundària
Al programa anterior, no importa com es declaren les funcions fill. La sortida depèn de com s’executen les funcions fill. Tenen un abast local amb el func (), de manera que no es poden cridar per separat.
Si els crideu per separat obtindreu un error perquè s’emmagatzemen com variables dins de la funció () i només es pot cridar si es diu func ().
Retorn d'una funció d'una funció
És possible tornar una funció mitjançant una altra funció. Mireu l’exemple següent per entendre-ho.
def func (n): def func1 (): return 'edureka' def func2 (): return 'python' if n == 1: return func1 else: return func2 a = func (1) b = func (2) print ( a ()) imprimir (b ())
Sortida: edureka python
Decoradors a Python
Els decoradors en python són molt potents que modifiquen el comportament d'una funció sense modificar-la permanentment. Bàsicament, embolcalla una altra funció i, atès que ambdues funcions són cridables, en torna una.
En retrospectiva, un decorador embolica una funció i modifica el seu comportament. Vegem un exemple senzill per entendre com podem treballar amb decoradors en python.
def function1 (function): def wrapper (): print ('hola') function () print ('welcome to python edureka') return wrapper def function2 (): print ('Pythonista') function2 = function1 (function2) function2 ( )
Sortida: hola pythonista benvingut a python edureka
Per fer les coses una mica més fàcils per als programadors, tenim un sucre sintàctic amb decoradors de pitó. Mireu un exemple a continuació per entendre com funciona.
def function1 (function): def wrapper (): print ('hola') function () print ('com estàs?') return wrapper @ function1 def function2 (): print ('pythonista') function2 ()
Sortida: hola pitonista com estàs?
La sortida serà similar al programa anterior, l’única diferència és que hem utilitzat la sintaxi de pastís amb el símbol @.
Ús de decoradors amb arguments
Quan teniu una funció amb arguments, es fa més complicada per a la funció de decorador, ja que també necessita arguments a la declaració. Per solucionar-ho, podem utilitzar els * args i ** kwargs a la funció d’embolcall interior. Mireu l’exemple següent per entendre-ho.
def function1 (funció): def wrapper (* args, ** kwargs): funció print ('hola') (* args, ** kwargs) print ('benvingut a edureka') return wrapper @ function1 def function2 (nom): print (f '{name}') function2 ('pythonista')
Sortida: hola pitonista benvingut a edureka
Retorn de valors de funcions decorades
Vegem un exemple per veure com podem retornar un valor d'una funció decorada.
def function1 (function): def wrapper (* args, ** kwargs): function (* args, ** kwargs) print ('ha funcionat') return wrapper @ function1 def function2 (name): print (f '{name} ') function2 (' python ')
Sortida: python va funcionar
Assegureu-vos de retornar la funció d’embolcall amb arguments per evitar errors.
Decoradors de fantasia a Python
Ara que ja sabem com funcionen els decoradors en python, explorem algunes característiques força complexes amb l'ajut d'alguns exemples.
Comanda java per finalitzar el programa
Decoradors de classes
Hi ha dues maneres de decorar una classe en pitó. El primer és on podeu decorar els mètodes dins d’una classe, hi ha decoradors integrats com @classmethod, @staticmethod i @property en python. @classmethod i @staticmethod defineixen mètodes dins d'una classe que no està connectat a cap altra instància d'una classe. @property s'utilitza normalment per personalitzar els getters i els definidors d'un atribut de classe. Vegem un exemple per entendre-ho.
class Square: def __init __ (self, side): self._side = side @property def side (self): retorna self._side @ side.setter def side (self, value): if value & gt = 0: self._side = valor else: 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)
Sortida: maig 25
Una altra manera de decorar la classe és decorant tota la classe. Prenguem un exemple per entendre-ho.
a partir de classificacions de dades importació de classificació de dades @ class de dataclass Targetes: rank: str suit: str
Decorar una classe no reflecteix els seus mètodes. És gairebé similar a escriure un decorador d’una funció, l’única diferència és la classe de l’argument en lloc d’una funció.
Classe Singleton
Una classe de singleton només té una instància. Hi ha un munt de singletons a Python, inclosos True, None, etc. Vegem un exemple per entendre-ho millor.
import functools def singleton (cls): @ functools.wraps (cls) def wrapper (* args, ** kwargs): if not wrapper.instance: wrapper.instance = cls (* args, ** kwargs) return wrapper.instance wrapper .instance = Cap retorna l'embolcall @singleton class One: passa primer = One () segon = One () imprimeix (el primer és segon)
Sortida: És cert
L’ús de ‘és’ només torna a ser vertader per als objectes que són la mateixa instància. L'exemple anterior utilitza el mateix enfocament que qualsevol altre decorador de funcions. L'única diferència és que hem utilitzat cls en lloc de funció. A més, el primer i el segon són exactament la mateixa instància.
Decoradors de nidificació
Podeu utilitzar diversos decoradors apilant-los els uns sobre els altres. Prenguem un exemple per entendre com funciona.
@ function1 @ function2 def function (name): print (f '{name}')
Així és com podem utilitzar decoradors imbricats apilant-los entre si. A l'exemple anterior, només és una simple representació, perquè funcioni haureu de definir function1 i function2 amb funcions d'embolcall dins de cadascuna d'elles.
diferència entre àgil i devops
Arguments en un decorador
Sempre és útil passar arguments en un decorador. Considerem l’exemple següent.
import funcools def repeat (num): def decorator_repeat (func): @ functools.wraps (func) def wrapper (* args, ** kwargs): for _ in range (num): value = func (* args, ** kwargs ) return value return wrapper return decorator_repeat @repeat (num = 4) def function (name): print (f '{name}') function ('python')
Sortida: python python python python
Això ens porta al final d’aquest article, on hem après com podem utilitzar Decorator a Python amb exemples. Espero que tingueu clar tot el que us ha estat compartit en aquest tutorial de decorador de Python
Si heu trobat rellevant aquest article sobre 'Tutorial de decorador de Python', consulteu el document una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món.
Som aquí per ajudar-vos en cada pas del vostre viatge i oferir un pla d’estudis dissenyat per a estudiants i professionals que vulguin ser . El curs està dissenyat per donar-vos un avantatge en la programació de Python i formar-vos tant per a conceptes bàsics com avançats de Python juntament amb diversos M'agrada
Si teniu cap pregunta, no dubteu a fer-vos totes les vostres preguntes a la secció de comentaris de 'Tutorial de decorador de Python' i el nostre equip estarà encantat de respondre-us.