Maison > Article > développement back-end > Par quoi commence un décorateur python ?
Les décorateurs sont une partie importante de Python. En termes simples : ce sont des fonctions qui modifient la fonctionnalité d’autres fonctions. Ils contribuent à rendre notre code plus court et plus pythonique.
Pour comprendre les décorateurs en Python, vous devez d'abord comprendre le concept de fermeture. (Apprentissage recommandé : Tutoriel vidéo Python)
En informatique, fermeture (anglais : Closure), également appelée fermeture lexicale (Lexical Closure) ou fermeture de fonction (function Closures) sont des fonctions qui font référence à des variables libres. La variable libre référencée restera avec la fonction même après avoir quitté l'environnement dans lequel elle a été créée.
Décorateur
Un décorateur commun ressemble généralement à ceci :
import functools def log(func): @functools.wraps(func) def wrapper(*args, **kwargs): print('call %s():' % func.__name__) print('args = {}'.format(*args)) return func(*args, **kwargs) return wrapper
Ceci définit une décoration qui imprime le nom de la méthode et ses paramètres de périphérique.
Pour l'appeler, doit commencer par @ :
@logdef test(p): print(test.__name__ + " param: " + p) test("I'm a param")
Sortie :
call test(): args = I'm a param test param: I'm a param
Lorsque le décorateur est utilisé, la syntaxe @ est utilisé, c'est un peu troublant. En fait, le décorateur n'est qu'une méthode, pas différente de la méthode d'appel suivante :
def test(p): print(test.__name__ + " param: " + p) wrapper = log(test) wrapper("I'm a param")
@La syntaxe passe simplement la fonction dans la fonction décorateur, il n'y a rien de magique à cela il.
Il convient de noter @functools.wraps(func), qui est le décorateur fourni par python. Il peut copier les méta-informations de la fonction d'origine vers la fonction func du décorateur. Les métainformations de la fonction incluent la docstring, le nom, la liste des paramètres, etc.
Vous pouvez essayer de supprimer @functools.wraps(func), vous constaterez que la sortie de test.__name__ devient un wrapper.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!