Maison développement back-end Tutoriel Python Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ?

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ?

Oct 20, 2023 pm 07:04 PM
装饰器 上下文管理器 travail en python

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ?

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ?

En Python, les décorateurs et les gestionnaires de contexte sont deux concepts et fonctions très utiles. Ils sont tous conçus pour simplifier le code, augmenter la lisibilité du code et faciliter la réutilisation du code.

1. Décorateur
Un décorateur est une fonction spéciale en Python qui est utilisée pour modifier le comportement d'une fonction. Cela nous permet d'envelopper ou d'étendre la fonction d'origine sans la modifier. Les décorateurs sont largement utilisés dans de nombreux frameworks et bibliothèques Python, tels que Flask, Django, etc., et sont également largement utilisés dans de nombreux scénarios de travail pratiques.

La structure de base d'un décorateur est la suivante :

def decorator_function(func):
    def wrapper(*args, **kwargs):
        # 在函数执行之前的操作
        result = func(*args, **kwargs)
        # 在函数执行之后的操作
        return result
    return wrapper
Copier après la connexion

La fonction décorateur decorator_function reçoit une fonction en paramètre et renvoie une nouvelle fonction wrapper. Dans la fonction wrapper, nous pouvons effectuer les opérations requises avant et après l'exécution de la fonction d'origine. decorator_function接收一个函数作为参数,并返回一个新的函数wrapper。在wrapper函数中,我们可以在执行原始函数之前和之后执行所需的操作。

下面是一个使用装饰器的例子,来计算函数的执行时间:

import time

def calculate_time(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数 {func.__name__} 的执行时间为 {end_time - start_time} 秒")
        return result
    return wrapper

@calculate_time
def my_function():
    # 执行一些耗时的操作
    time.sleep(2)
    print("函数运行完毕")

my_function()
Copier après la connexion

在上述例子中,我们定义了一个calculate_time的装饰器函数,并通过@calculate_time将其应用到my_function函数上。当调用my_function时,装饰器函数会被调用,记录函数的执行时间并打印出来。

二、上下文管理器
上下文管理器是一种在特定作用域下执行代码的工具,它能够确保在使用资源之前和之后进行正确的初始化和清理操作。上下文管理器通常会使用with语句来进行调用。

我们可以通过两种方式来定义一个上下文管理器:使用类装饰器或者contextmanager装饰器。

(1)使用类装饰器方式实现上下文管理器:

class MyContextManager:
    def __enter__(self):
        # 初始化资源
        print("进入上下文管理器,初始化资源")
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        # 清理资源
        print("退出上下文管理器,清理资源")

with MyContextManager() as my_context:
    # 使用资源
    print("使用上下文管理器中的资源")
Copier après la connexion

在上述例子中,我们定义了一个名为MyContextManager的上下文管理器类,实现了__enter____exit__方法。在__enter__方法中,我们可以进行资源的初始化工作,在__exit__方法中,我们可以进行资源的清理工作。在with语句中,我们使用as关键字指定了一个名称my_context,这样就可以在with语句块内部使用该名称来引用上下文管理器。

(2)使用contextmanager装饰器方式实现上下文管理器:

from contextlib import contextmanager

@contextmanager
def my_context_manager():
    # 初始化资源
    print("进入上下文管理器,初始化资源")
    try:
        yield
    finally:
        # 清理资源
        print("退出上下文管理器,清理资源")

with my_context_manager():
    # 使用资源
    print("使用上下文管理器中的资源")
Copier après la connexion

在上述例子中,我们使用contextmanager装饰器定义了一个生成器函数my_context_manager。在生成器函数内部,我们可以进行资源的初始化和清理工作。yield表达式之前的代码块相当于__enter__方法,yield表达式之后的代码块相当于__exit__方法。在with语句中,我们不需要使用as

Ce qui suit est un exemple d'utilisation d'un décorateur pour calculer le temps d'exécution d'une fonction :

rrreee
Dans l'exemple ci-dessus, nous définissons une fonction décorateur de calculate_time et passons @calculate_time Appliquez-le à la fonction <code>my_function. Lorsque my_function est appelé, la fonction décorateur sera appelée, le temps d'exécution de la fonction sera enregistré et imprimé.

🎜2. Gestionnaire de contexte 🎜Un gestionnaire de contexte est un outil qui exécute du code dans une portée spécifique. Il peut garantir des opérations d'initialisation et de nettoyage correctes avant et après l'utilisation des ressources. Les gestionnaires de contexte sont généralement appelés à l'aide de l'instruction with. 🎜🎜Nous pouvons définir un gestionnaire de contexte de deux manières : en utilisant un décorateur de classe ou un décorateur contextmanager. 🎜🎜(1) Utilisez le décorateur de classe pour implémenter le gestionnaire de contexte : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons défini une classe de gestionnaire de contexte nommée MyContextManager et implémenté __enter__ et <code> Méthodes __exit__. Dans la méthode __enter__, nous pouvons initialiser les ressources, et dans la méthode __exit__, nous pouvons nettoyer les ressources. Dans l'instruction with, nous utilisons le mot-clé as pour spécifier un nom my_context, afin qu'il puisse être utilisé dans l'instruction with Ce nom est utilisé à l'intérieur du bloc pour faire référence au gestionnaire de contexte. 🎜🎜(2) Utilisez le décorateur <code>contextmanager pour implémenter le gestionnaire de contexte : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons le décorateur contextmanager pour définir une fonction génératrice mon_context_manager. À l’intérieur de la fonction générateur, nous pouvons initialiser et nettoyer les ressources. Le bloc de code avant l'expression yield est équivalent à la méthode __enter__, et le bloc de code après l'expression yield est équivalent à la méthode Méthode __exit__. Dans l'instruction with, nous n'avons pas besoin de spécifier le nom du gestionnaire de contexte à l'aide du mot-clé as. 🎜🎜Résumé : 🎜Les décorateurs et les gestionnaires de contexte sont des concepts et des fonctionnalités très utiles en Python. Les décorateurs peuvent être utilisés pour modifier le comportement des fonctions et sont largement utilisés dans de nombreux frameworks et bibliothèques. Un gestionnaire de contexte peut exécuter du code dans une portée spécifique et assurer une initialisation et un nettoyage appropriés des ressources. Les deux peuvent simplifier l’écriture du code, améliorer la lisibilité du code et faciliter la réutilisation du code. Ce qui précède est une introduction de base et un exemple de code sur les décorateurs et les gestionnaires de contexte. J'espère que cela vous sera utile. 🎜

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Apprenez étape par étape à utiliser les décorateurs pour étendre les minuteries Python. Apprenez étape par étape à utiliser les décorateurs pour étendre les minuteries Python. Apr 13, 2023 pm 08:46 PM

Ceci est notre troisième article pour vous apprendre étape par étape comment implémenter un timer Python. Les deux premiers articles : vous apprennent étape par étape comment implémenter un timer Python et utiliser des gestionnaires de contexte pour étendre les timers Python, rendant notre classe Timer pratique à utiliser, belle et pratique. Mais cela ne nous satisfait pas, il existe encore un cas d’usage qui peut encore le simplifier. Supposons que nous devions suivre le temps passé dans une fonction donnée dans notre base de code. Avec un gestionnaire de contexte, vous avez essentiellement deux options différentes : 1. Utiliser ​Timer chaque fois que vous appelez une fonction : with Timer("some_name") : do_something() Quand nous sommes dans

Comment résoudre l'erreur de fichier non fermé de Python ? Comment résoudre l'erreur de fichier non fermé de Python ? Jun 25, 2023 am 08:52 AM

Python est un langage de programmation de haut niveau largement utilisé dans des domaines tels que la science des données et l'intelligence artificielle. Dans la programmation Python, nous rencontrons souvent des erreurs de fichiers non fermés, qui peuvent entraîner des plantages du programme, des pertes de données et d'autres problèmes. La résolution des erreurs de fichiers non fermés est donc une compétence essentielle dans la programmation Python. Cet article explique comment résoudre l'erreur de fichier non fermé de Python. 1. Qu'est-ce qu'une erreur de fichier non fermé ? En Python, vous devez utiliser la fonction open() lors de l'ouverture d'un fichier.

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ? Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ? Oct 20, 2023 pm 07:04 PM

Comment fonctionnent les décorateurs et les gestionnaires de contexte en Python ? En Python, les décorateurs et les gestionnaires de contexte sont deux concepts et fonctionnalités très utiles. Ils sont tous conçus pour simplifier le code, augmenter la lisibilité du code et faciliter la réutilisation du code. 1. Décorateur Un décorateur est une fonction spéciale en Python utilisée pour modifier le comportement d'une fonction. Cela nous permet d'envelopper ou d'étendre la fonction d'origine sans la modifier. Les décorateurs sont largement utilisés dans de nombreux frameworks et bibliothèques Python, tels que Flask, Dj

Débogage des problèmes de fuite de mémoire Pytorch à l'aide de décorateurs de contexte Débogage des problèmes de fuite de mémoire Pytorch à l'aide de décorateurs de contexte Apr 10, 2023 am 11:31 AM

Les décorateurs sont des implémentations spécifiques des gestionnaires de contexte Python. Cet article illustrera comment les utiliser à travers un exemple de débogage GPU pytorch. Même si cela ne fonctionne pas dans toutes les situations, je les ai trouvés très utiles. Débogage des problèmes de fuite de mémoire Il existe de nombreuses façons de déboguer les fuites de mémoire. Cet article présentera une méthode utile pour identifier les lignes problématiques dans votre code. Cette méthode peut aider à trouver l’emplacement spécifique de manière concise. Débogage manuel ligne par ligne Si vous rencontrez un problème, une méthode classique et couramment utilisée consiste à utiliser le débogueur pour inspecter ligne par ligne, comme dans l'exemple suivant : Rechercher des extraits de code sur la façon de calculer le nombre total de tous les tenseurs dans pytorch dans le moteur de recherche, tel que : tensor -counter-s

Comprendre les décorateurs Python en un seul article Comprendre les décorateurs Python en un seul article Apr 12, 2023 pm 09:40 PM

Python est un langage adapté aux débutants. Cependant, il possède également de nombreuses fonctionnalités avancées et difficiles à maîtriser, comme les décorateurs. De nombreux débutants n'ont jamais compris les décorateurs et leur fonctionnement. Dans cet article, nous présenterons les tenants et les aboutissants des décorateurs. En Python, une fonction est une structure très flexible qui peut être affectée à une variable, passée en paramètre à une autre fonction ou utilisée comme sortie d'une fonction. Un décorateur est essentiellement une fonction qui permet à d’autres fonctions d’ajouter des fonctionnalités sans modification. C'est le sens de "décoration". Cette "décoration" représente elle-même une fonction si elle est utilisée pour modifier différentes fonctions, c'est pour ajouter cette fonction à ces fonctions.

Comment étendre les minuteries Python avec les gestionnaires de contexte Comment étendre les minuteries Python avec les gestionnaires de contexte Apr 12, 2023 pm 08:43 PM

Ci-dessus, nous avons créé la première classe Python timer, puis avons progressivement étendu notre classe Timer, et son code est également relativement riche et puissant. Nous ne pouvons pas nous contenter de cela, nous devons encore modéliser du code pour utiliser le Timer : d'abord, instancier la classe. Deuxièmement, appeler .start() avant le bloc de code à chronométrer. Enfin, appeler .stop(). après le bloc de code. Un gestionnaire de contexte de timer Python Python a une construction unique pour appeler des fonctions avant et après des blocs de code : les gestionnaires de contexte. Comprendre les gestionnaires de contexte dans Python Les gestionnaires de contexte constituent depuis longtemps une partie importante de Python. Par le PEP 343 en 2005

Programmation Python : Re-compréhension des fonctions du décorateur Programmation Python : Re-compréhension des fonctions du décorateur May 27, 2023 pm 03:57 PM

Les décorateurs sont des outils très utiles en Python. Un décorateur est une fonction qui prend une autre fonction comme paramètre et étend ses fonctionnalités sans la modifier explicitement. Il permet de modifier le comportement d'une fonction ou d'une classe sans toucher à son code source. En d’autres termes, un décorateur enveloppe une fonction pour étendre son comportement plutôt que de la modifier de manière permanente. À partir de cet article, étudions ce que sont les décorateurs et comment ils fonctionnent en Python. 1.1 À propos des fonctions Afin de comprendre le fonctionnement des décorateurs, nous devons revoir quelques concepts importants sur les fonctions en Python. Sachez toujours qu'en Python, les fonctions sont des citoyens de premier ordre, vous devez donc garder les concepts suivants à l'esprit : ü Fonction

Problèmes courants et solutions pour les décorateurs en Python Problèmes courants et solutions pour les décorateurs en Python Oct 10, 2023 am 11:58 AM

Questions fréquemment posées et solutions sur les décorateurs en Python Que sont les décorateurs ? Les décorateurs sont une fonctionnalité très puissante de Python qui peut être utilisée pour modifier le comportement des fonctions ou des classes existantes sans modifier leur code source. Un décorateur est en fait une fonction ou une classe qui accepte une fonction ou une classe comme paramètre et renvoie une nouvelle fonction ou classe. Comment écrire un décorateur simple ? Voici un exemple de décorateur simple : defdecorator(func):definner_func

See all articles