Notes de Python (18): décorateur

Une semaine de bol 2021-10-29 12:31:58
notes python corateur

Petite connaissance,Grand défi!Cet article participe“Les programmeurs ont besoin de peu de connaissances”Activités créatives.

Bonjour tout le monde,Je suisUne semaine de bol,Celui qui ne veut pas être bu(Volume interne)Avant.Si l'article écrit a la chance d'avoir votre faveur,Quelle chance~

Décorateur

Décorateur(Decorator):Littéralement.,C'est l'appareil qui décore l'objet.Sans modifier le code original,Ajouter une nouvelle fonctionnalité ou des restrictions supplémentaires ou aider à la sortie de l'objet décoré.

.Les décorateurs sont caractérisés par la fonction qui apparaît comme son paramètre,Les décorateurs ont également des caractéristiques de fermeture.Voici un exemple de code:

# Définir un décorateur
def decorate(func):
def wrapper():
func()
print("Les élèves ont été ajoutés à la liste des élèves de l'école")
print("Les étudiants ont été ajoutés à la liste des étudiants du Département")
print("Les élèves ont été ajoutés à la liste des classes")
return wrapper
@decorate
def student():
print(" Je suis la petite fleur ")
student()
'''
---Résultats obtenus---
Je suis la petite fleur
Les élèves ont été ajoutés à la liste des élèves de l'école
Les étudiants ont été ajoutés à la liste des étudiants du Département
Les élèves ont été ajoutés à la liste des classes
'''
Copier le Code

Utiliser**@**** Symbole plus nom de la fonction ** Pour décorer une fonction

Exécution du processus:Parce questudent Est une fonction décorée ,Le systèmestudent La fonction passe dans le paramètre decorateFonctions(Décorateurdecorate),Mise en œuvredecorateFonctions, Et assigner la valeur de retour à studentFonctions.

Le Code précédent est égal au code suivant :

# Définir un décorateur
def decorate(func):
def wrapper():
func()
print("Les élèves ont été ajoutés à la liste des élèves de l'école")
print("Les étudiants ont été ajoutés à la liste des étudiants du Département")
print("Les élèves ont été ajoutés à la liste des classes")
return wrapper
def student():
print(" Je suis la petite fleur ")
# Passer la valeur de retour à f Et appelle
f = decorate(student) # On ne peut pas ajouter (), Sinon, c'est un appel
f()
'''
---Résultats obtenus---
Je suis la petite fleur
Les élèves ont été ajoutés à la liste des élèves de l'école
Les étudiants ont été ajoutés à la liste des étudiants du Département
Les élèves ont été ajoutés à la liste des classes
'''
Copier le Code

Sistudent Il y a des déclarations directement exécutables en dehors de la fonction , Sans appeler studentDans le cas d'une fonction,Sera également exécuté,Voici un exemple de code::

# Définir un décorateur
def decorate(func):
print(" C'est un code externe ")
def wrapper():
func()
print("Les élèves ont été ajoutés à la liste des élèves de l'école")
print("Les étudiants ont été ajoutés à la liste des étudiants du Département")
print("Les élèves ont été ajoutés à la liste des classes")
return wrapper
@decorate
def student():
print(" Je suis la petite fleur ")
# student()
'''
---Résultats obtenus---
C'est un code externe
'''
Copier le Code

Scénario d'application

Peut être utilisé sur les sites de commerce électronique pour déterminer si l'utilisateur s'est connecté pour continuer ; Ajouter des scènes comme des journaux ,Voici un exemple de code:

# Définir un décorateur
def decorate(func):
def wrapper():
func()
print(" Vérification de la connexion de l'utilisateur ")
# if # Bloc de code pour déterminer si vous êtes connecté
# pass
print("Utilisateur connecté")
return wrapper
@decorate # Utilisation de garnitures
def add_shopping_cart():
print("Ajouté avec succès")
@decorate # Utilisation de garnitures
def payment():
print("Paiement réussi")
add_shopping_cart()
payment()
'''
---Résultats obtenus---
Ajouté avec succès
Vérification de la connexion de l'utilisateur
Utilisateur connecté
Paiement réussi
Vérification de la connexion de l'utilisateur
Utilisateur connecté
'''
Copier le Code

Décorateur universel

Parce que les paramètres de la fonction peuvent ne pas être fixes , Cette fonction peut donc être réalisée par des paramètres variables de la fonction .

Voici un exemple de code::

def decorate(func):
def wrapper(*args, **kwargs): # Utiliser des paramètres variables pour obtenir l'effet d'accepter n'importe quel paramètre
print(" Détection en cours ...")
print(".............")
print("Test terminé.")
func(*args, **kwargs)
return wrapper
@decorate # Utilisation de garnitures
def f1(): # Aucun paramètre
print(" Celui - ci n'a aucune fonction ")
@decorate
def f2(name): # Un paramètre
print("- Oui.:", name)
@decorate
def student(*students): # Plusieurs paramètres # *students Pour recevoir plusieurs paramètres
for ch in students:
print(ch)
@decorate
def student_classroom(*students, classroom=" Poste de première ligne "): # Recevoir les paramètres qui peuvent être assignés
print(f"C'est{classroom}Étudiants")
for ch in students:
print(ch)
# Appelez la fonction
f1()
'''
---Résultats obtenus---
Détection en cours ...
.............
Test terminé.
Celui - ci n'a aucune fonction
'''
f2("Une semaine de bol")
'''
---Résultats obtenus---
Détection en cours ...
.............
Test terminé.
- Oui.: Une semaine de bol
'''
student("Zhang San", "Li - si.", "Wang Wu")
'''
---Résultats obtenus---
Détection en cours ...
.............
Test terminé.
Zhang San
Li - si.
Wang Wu
'''
student_classroom("Zhang San", "Li - si.", "Wang Wu", classroom=" Poste de première ligne ")
'''
Détection en cours ...
.............
Test terminé.
C'est un étudiant de première classe.
Zhang San
Li - si.
Wang Wu
'''
Copier le Code

Pour éviter les erreurs , Lors de la définition de la garniture, définissez - la comme une garniture universelle

Décorateur multicouche

Exécution à plusieurs niveaux l'ordre d'exécution séquentiel est de l'intérieur à l'extérieur , Appelez d'abord la garniture intérieure , Enfin, appelez la garniture extérieure ,Voici un exemple de code:

def maths(func): # Définir le premier décorateur
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print(" L'étudiant a étudié les mathématiques ")
return wrapper
def Chinese(func): # Définir le premier décorateur
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print(" L'étudiant a étudié le chinois ")
return wrapper
def English(func): # Définir un troisième décorateur
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print(" L'étudiant a étudié l'anglais ")
return wrapper
@maths
@English
def student1(name):
print(f"Étudiants{name}C'est fait")
@English
@Chinese
@maths
def student2(name):
print(f"Étudiants{name}C'est fait")
# Appelez la fonction
student1("Xiao Ming")
'''
L'étudiant Xiaoming a terminé
L'étudiant a étudié l'anglais
L'étudiant a étudié les mathématiques
'''
student2("Les petites fleurs")
'''
Étudiant Floret a terminé
L'étudiant a étudié les mathématiques
L'étudiant a étudié le chinois
L'étudiant a étudié l'anglais
'''
Copier le Code

Garniture avec paramètres

La décoration avec paramètres est divisée en trois couches ,Comme suit::

Premier étage: Responsable de la réception des paramètres du décorateur

Deuxième étage : Responsable de la réception des fonctions

Troisième étage: Paramètre responsable de la réception de la fonction

Voici un exemple de code:

# Garniture avec paramètres
def outer(a): # Premier étage: Responsable de la réception des paramètres du décorateur
def decorate(func): # Deuxième étage : Responsable de la réception des fonctions
def wrapper(*args, **kwargs): # Troisième étage Paramètre responsable de la réception de la fonction
for i in range(a):
print(i)
func(*args, **kwargs)
return wrapper # Ce qui revient, c'est :Troisième étage
return decorate # Ce qui revient, c'est :Deuxième étage
@outer(3)
def number():
print(" Impression terminée ")
number()
'''
0
1
2
Impression terminée
'''
Copier le Code

La fonction la plus externe reçoit les paramètres du décorateur , Le contenu est toujours celui de l'original .

版权声明
本文为[Une semaine de bol]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211029123154412z.html

  1. Python crawler selenium framework. You can start with these five questions | Python skill tree
  2. It is said that Python is omnipotent. It's really good to see Liyang photography circle with Python this time
  3. 【Python 爬虫】 4、爬虫基本原理
  4. 【Python 爬蟲】 4、爬蟲基本原理
  5. 【 Python crawler】 4. Principes de base du crawler
  6. 这道python题到底应该要怎么做
  7. Que doit faire exactement ce problème Python
  8. Après l'importation des variables du module Python, les valeurs imprimées sont fixes.
  9. Nouveau singe Muzi Lee: 0 cours de formation Python de base types de hachage pour les opérations Python redis
  10. Looking at problems from a fresh perspective: analyzing selenium principle from the perspective of Python
  11. Insérez le format de date dans la base de données MySQL en python et ne l'exécutez pas.
  12. Try Python 3.10 with CONDA
  13. Répondez en python et demandez à quelqu'un de vous aider.
  14. Un simple problème de travail Python, qui ne fonctionne pas
  15. Problèmes d'écriture Python pour la boucle
  16. Comment Python exécute les commandes du programme à plusieurs reprises au lieu de quitter
  17. YYDS! Dexplot: one line of Python code to easily draw statistical charts!
  18. pandas生成的透视表如何和源数据一起保存
  19. pandas生成的透視錶如何和源數據一起保存
  20. Comment sauvegarder le tableau pivot généré par pandas avec les données sources
  21. 10 fois plus efficace avec cache dans le développement de Django
  22. 求Python *.svg文件操作方法
  23. 求Python *.svg文件操作方法
  24. Trouver la méthode de fonctionnement du fichier Python *.Svg
  25. 【 python】 Internal Guide for Unit Test Practice
  26. 用Python编程佩尔数列pell数列循环结构
  27. 【 python】 échafaudage fastapi: spécification du développement du projet d'interface arrière fastapi
  28. [Python] restful Specification Practice Based on fastapi
  29. Python代码阅读(第26篇):将列表映射成字典
  30. How to use Python to make a screen color extractor with Exe file
  31. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  32. Python代码阅读(第26篇):将列表映射成字典
  33. Python代碼閱讀(第26篇):將列錶映射成字典
  34. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  35. 使用 Python 进行数据可视化之Seaborn
  36. Real time access to stock data, free—— Python crawler Sina stock actual combat
  37. Seaborn pour la visualisation des données en python
  38. 浅识XPath(熟练掌握XPath的语法)【python爬虫入门进阶】(03)
  39. Python中if else语句进行操作的时候哪里除了错,搞不懂
  40. Python题,我刚学,还不会
  41. Python題,我剛學,還不會
  42. Je viens d'apprendre, pas encore.
  43. 云计算开发:Python3-find()方法详解
  44. Real time access to stock data, free—— Python crawler Sina stock actual combat
  45. Développement de l'informatique en nuage: détails de la méthode Python 3 - find ()
  46. 如何使用Python进行超参调参和调优
  47. 如何使用Python進行超參調參和調優
  48. Comment utiliser Python pour le réglage hyperparamétrique
  49. Première connaissance du module urllib Python
  50. Python入门:看了这篇文章如果1个小时没法入门Python,那么还是换个语言吧!!
  51. Python(day1):Python 3 教程
  52. Python(day3):Python3 安装与环境搭建
  53. Python (day3): installation et environnement Python 3
  54. Python (day1): tutoriel Python 3
  55. Démarrer avec Python: Si vous ne pouvez pas commencer avec Python en une heure, changez de langue!!
  56. Pandas:DataFrame对象的基础操作
  57. 关于#python#的问题:月球上物体的体重在地球上的16.5%,编写程序输出未来10年在地球上和月球上的体重状况
  58. 反转一个3位整数(Python 实现)
  59. Questions sur # Python #: les objets lunaires pèsent 16,5% de la masse de la terre et un programme est programmé pour produire la masse de la terre et de la lune au cours des 10 prochaines années
  60. Use of Python pandas!!!!! Explain in detail