Maison > développement back-end > Tutoriel Python > Par quoi commence un décorateur python ?

Par quoi commence un décorateur python ?

(*-*)浩
Libérer: 2019-07-20 13:30:52
original
3315 Les gens l'ont consulté

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.

Par quoi commence un décorateur python ?

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
Copier après la connexion

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")
Copier après la connexion

Sortie :

call test():
args = I'm a param
test param: I'm a param
Copier après la connexion

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")
Copier après la connexion

@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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal