Heim Backend-Entwicklung Python-Tutorial Wie funktionieren Dekorateure und Kontextmanager in Python?

Wie funktionieren Dekorateure und Kontextmanager in Python?

Oct 20, 2023 pm 07:04 PM
装饰器 上下文管理器 Python-Arbeit

Wie funktionieren Dekorateure und Kontextmanager in Python?

Wie funktionieren Dekoratoren und Kontextmanager in Python?

In Python sind Dekoratoren und Kontextmanager zwei sehr nützliche Konzepte und Funktionen. Sie alle sind darauf ausgelegt, Code zu vereinfachen, die Lesbarkeit des Codes zu verbessern und die Wiederverwendung von Code zu erleichtern.

1. Dekorator
Ein Dekorator ist eine spezielle Funktion in Python, die verwendet wird, um das Verhalten einer Funktion zu ändern. Es ermöglicht uns, die ursprüngliche Funktion zu umschließen oder zu erweitern, ohne sie zu ändern. Dekoratoren werden häufig in vielen Python-Frameworks und -Bibliotheken wie Flask, Django usw. und auch in vielen praktischen Arbeitsszenarien verwendet.

Die Grundstruktur eines Dekorators ist wie folgt:

def decorator_function(func):
    def wrapper(*args, **kwargs):
        # 在函数执行之前的操作
        result = func(*args, **kwargs)
        # 在函数执行之后的操作
        return result
    return wrapper
Nach dem Login kopieren

Die Dekoratorfunktion decorator_function empfängt eine Funktion als Parameter und gibt eine neue Funktion wrapper zurück. In der Funktion wrapper können wir die erforderlichen Vorgänge vor und nach der Ausführung der ursprünglichen Funktion ausführen. 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()
Nach dem Login kopieren

在上述例子中,我们定义了一个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("使用上下文管理器中的资源")
Nach dem Login kopieren

在上述例子中,我们定义了一个名为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("使用上下文管理器中的资源")
Nach dem Login kopieren

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

Das Folgende ist ein Beispiel für die Verwendung eines Dekorators zur Berechnung der Ausführungszeit einer Funktion:

rrreee
Im obigen Beispiel definieren wir eine Dekoratorfunktion von calculate_time und übergeben @calculate_time Wenden Sie es auf die Funktion <code>my_function an. Wenn my_function aufgerufen wird, wird die Dekoratorfunktion aufgerufen, die Ausführungszeit der Funktion wird aufgezeichnet und gedruckt.

🎜2. Kontextmanager 🎜Ein Kontextmanager ist ein Tool, das Code in einem bestimmten Bereich ausführt. Es kann korrekte Initialisierungs- und Bereinigungsvorgänge vor und nach der Verwendung von Ressourcen sicherstellen. Kontextmanager werden normalerweise mit der Anweisung with aufgerufen. 🎜🎜Wir können einen Kontextmanager auf zwei Arten definieren: mithilfe eines Klassendekorators oder eines contextmanager-Dekorators. 🎜🎜(1) Verwenden Sie den Klassendekorator, um den Kontextmanager zu implementieren: 🎜rrreee🎜Im obigen Beispiel haben wir eine Kontextmanagerklasse mit dem Namen MyContextManager definiert und __enter__ und <code> implementiert __exit__ Methoden. Mit der Methode __enter__ können wir Ressourcen initialisieren und mit der Methode __exit__ können wir Ressourcen bereinigen. In der with-Anweisung verwenden wir das Schlüsselwort as, um einen Namen my_context anzugeben, damit er in der with-Anweisung Dieser Name wird innerhalb des Blocks verwendet, um auf den Kontextmanager zu verweisen. 🎜🎜(2) Verwenden Sie den Dekorator <code>contextmanager, um den Kontextmanager zu implementieren: 🎜rrreee🎜Im obigen Beispiel verwenden wir den Dekorator contextmanager, um eine Generatorfunktion zu definieren my_context_manager. Innerhalb der Generatorfunktion können wir Ressourcen initialisieren und bereinigen. Der Codeblock vor dem yield-Ausdruck entspricht der Methode __enter__, und der Codeblock nach dem yield-Ausdruck entspricht dem __exit__-Methode. In der with-Anweisung müssen wir den Namen des Kontextmanagers nicht mit dem Schlüsselwort as angeben. 🎜🎜Zusammenfassung: 🎜Dekoratoren und Kontextmanager sind sehr nützliche Konzepte und Funktionen in Python. Dekoratoren können zum Ändern des Verhaltens von Funktionen verwendet werden und werden in vielen Frameworks und Bibliotheken häufig verwendet. Ein Kontextmanager kann Code innerhalb eines bestimmten Bereichs ausführen und die ordnungsgemäße Initialisierung und Bereinigung von Ressourcen sicherstellen. Beides kann das Schreiben von Code vereinfachen, die Lesbarkeit des Codes verbessern und die Wiederverwendung von Code erleichtern. Das Obige ist eine grundlegende Einführung und ein Beispielcode zu Dekoratoren und Kontextmanagern. Ich hoffe, es wird Ihnen hilfreich sein. 🎜

Das obige ist der detaillierte Inhalt vonWie funktionieren Dekorateure und Kontextmanager in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Bringen Sie Ihnen Schritt für Schritt bei, wie Sie Dekoratoren verwenden, um Python-Timer zu erweitern Bringen Sie Ihnen Schritt für Schritt bei, wie Sie Dekoratoren verwenden, um Python-Timer zu erweitern Apr 13, 2023 pm 08:46 PM

Dies ist unser dritter Artikel, in dem wir Ihnen Schritt für Schritt zeigen, wie Sie einen Python-Timer implementieren. Die ersten beiden Artikel zeigen Ihnen Schritt für Schritt, wie Sie einen Python-Timer implementieren und Kontextmanager verwenden, um Python-Timer zu erweitern, wodurch unsere Timer-Klasse benutzerfreundlich, schön und praktisch wird. Damit geben wir uns aber nicht zufrieden, es gibt noch einen Anwendungsfall, der es noch weiter vereinfachen kann. Angenommen, wir müssen die in einer bestimmten Funktion in unserer Codebasis verbrachte Zeit verfolgen. Mit einem Kontextmanager haben Sie grundsätzlich zwei verschiedene Möglichkeiten: 1. Verwenden Sie ​Timer jedes Mal, wenn Sie eine Funktion aufrufen: mit Timer("some_name"): do_something() Wenn wir drin sind

Wie kann der Fehler „Datei nicht geschlossen' in Python behoben werden? Wie kann der Fehler „Datei nicht geschlossen' in Python behoben werden? Jun 25, 2023 am 08:52 AM

Python ist eine High-Level-Programmiersprache, die in Bereichen wie Datenwissenschaft und künstlicher Intelligenz weit verbreitet ist. Bei der Python-Programmierung stoßen wir häufig auf Fehler, bei denen eine Datei nicht geschlossen wurde, was zu Programmabstürzen, Datenverlust und anderen Problemen führen kann. Daher ist das Lösen von Fehlern, bei denen eine Datei nicht geschlossen wurde, eine wesentliche Fähigkeit in der Python-Programmierung. In diesem Artikel wird erläutert, wie Sie den Python-Fehler „Datei nicht geschlossen“ beheben können. 1. Was ist ein Fehler, bei dem die Datei nicht geschlossen wurde? In Python müssen Sie beim Öffnen einer Datei die Funktion open() verwenden.

Wie funktionieren Dekorateure und Kontextmanager in Python? Wie funktionieren Dekorateure und Kontextmanager in Python? Oct 20, 2023 pm 07:04 PM

Wie funktionieren Dekorateure und Kontextmanager in Python? In Python sind Dekoratoren und Kontextmanager zwei sehr nützliche Konzepte und Funktionen. Sie alle sind darauf ausgelegt, Code zu vereinfachen, die Lesbarkeit des Codes zu verbessern und die Wiederverwendung von Code zu erleichtern. 1. Dekorator Ein Dekorator ist eine spezielle Funktion in Python, die verwendet wird, um das Verhalten einer Funktion zu ändern. Es ermöglicht uns, die ursprüngliche Funktion zu umschließen oder zu erweitern, ohne sie zu ändern. Dekoratoren werden häufig in vielen Python-Frameworks und -Bibliotheken wie Flask und Dj verwendet

Debuggen von Pytorch-Speicherleckproblemen mithilfe von Kontextdekoratoren Debuggen von Pytorch-Speicherleckproblemen mithilfe von Kontextdekoratoren Apr 10, 2023 am 11:31 AM

Dekoratoren sind spezifische Implementierungen von Python-Kontextmanagern. In diesem Artikel wird die Verwendung anhand eines Beispiels für das Debuggen einer Pytorch-GPU veranschaulicht. Auch wenn es möglicherweise nicht in jeder Situation funktioniert, fand ich sie sehr nützlich. Debuggen von Speicherlecks Es gibt viele Möglichkeiten, Speicherlecks zu debuggen. In diesem Artikel wird eine nützliche Methode zum Identifizieren problematischer Zeilen in Ihrem Code demonstriert. Diese Methode kann dabei helfen, den spezifischen Standort präzise zu finden. Manuelles zeilenweises Debuggen Wenn Sie auf ein Problem stoßen, besteht eine klassische und häufig verwendete Methode darin, den Debugger zur zeilenweisen Überprüfung zu verwenden, wie im folgenden Beispiel: Finden Sie Codeausschnitte zur Berechnung der Gesamtzahl aller Tensoren in Pytorch in die Suchmaschine, wie zum Beispiel: tensor -counter-s

Lernen Sie Python-Dekoratoren in einem Artikel kennen Lernen Sie Python-Dekoratoren in einem Artikel kennen Apr 12, 2023 pm 09:40 PM

Python ist eine anfängerfreundliche Sprache. Es verfügt jedoch auch über viele erweiterte Funktionen, die schwer zu beherrschen sind, z. B. Dekorateure. Viele Anfänger haben noch nie verstanden, wie Dekorateure arbeiten. In diesem Artikel stellen wir die Besonderheiten von Dekorateuren vor. In Python ist eine Funktion eine sehr flexible Struktur, die einer Variablen zugewiesen, als Parameter an eine andere Funktion übergeben oder als Ausgabe einer Funktion verwendet werden kann. Ein Dekorator ist im Wesentlichen eine Funktion, die es anderen Funktionen ermöglicht, einige Funktionen ohne Änderungen hinzuzufügen. Dies ist die Bedeutung von „Dekoration“. Diese „Dekoration“ selbst stellt eine Funktion dar. Wenn Sie sie verwenden, um verschiedene Funktionen zu ändern, wird diese Funktion zu diesen Funktionen hinzugefügt.

So erweitern Sie Python-Timer mit Kontextmanagern So erweitern Sie Python-Timer mit Kontextmanagern Apr 12, 2023 pm 08:43 PM

Oben haben wir die erste Python-Timer-Klasse erstellt und dann unsere Timer-Klasse schrittweise erweitert, und ihr Code ist auch relativ umfangreich und leistungsstark. Wir können damit nicht zufrieden sein, wir müssen noch etwas Code erstellen, um den Timer zu verwenden: Zuerst die Klasse instanziieren, zweitens .start() aufrufen, bevor der Codeblock zeitlich festgelegt wird. nach dem Codeblock. Ein Python-Timer-Kontextmanager. Python verfügt über ein einzigartiges Konstrukt zum Aufrufen von Funktionen vor und nach Codeblöcken: Kontextmanager. Kontextmanager in Python verstehen Kontextmanager sind seit langem ein wichtiger Bestandteil von Python. Von PEP 343 im Jahr 2005

Python-Programmierung: Neues Verständnis dekoratorbezogener Funktionen Python-Programmierung: Neues Verständnis dekoratorbezogener Funktionen May 27, 2023 pm 03:57 PM

Dekoratoren sind sehr nützliche Werkzeuge in Python. Ein Dekorator ist eine Funktion, die eine andere Funktion als Parameter verwendet und deren Funktionalität erweitert, ohne sie explizit zu ändern. Es ermöglicht uns, das Verhalten einer Funktion oder Klasse zu ändern, ohne deren Quellcode zu berühren. Mit anderen Worten: Ein Dekorateur umhüllt eine Funktion, um ihr Verhalten zu erweitern, anstatt sie dauerhaft zu ändern. Lassen Sie uns ausgehend von diesem Artikel untersuchen, was Dekoratoren sind und wie sie in Python funktionieren. 1.1 Über Funktionen Um zu verstehen, wie Dekoratoren funktionieren, müssen wir einige wichtige Konzepte über Funktionen in Python überprüfen. Beachten Sie immer, dass Funktionen (Funktionen) in Python Bürger erster Klasse sind, daher sollten Sie die folgenden Konzepte im Hinterkopf behalten: ü Funktionen

Häufige Probleme und Lösungen für Dekorateure in Python Häufige Probleme und Lösungen für Dekorateure in Python Oct 10, 2023 am 11:58 AM

Häufig gestellte Fragen und Lösungen zu Dekoratoren in Python. Was sind Dekoratoren, eine sehr leistungsstarke Funktion in Python, mit der das Verhalten vorhandener Funktionen oder Klassen geändert werden kann, ohne deren Quellcode zu ändern? Ein Dekorator ist eigentlich eine Funktion oder Klasse, die eine Funktion oder Klasse als Parameter akzeptiert und eine neue Funktion oder Klasse zurückgibt. Wie schreibe ich einen einfachen Dekorator? Hier ist ein Beispiel für einen einfachen Dekorator: defdecorator(func):definner_func

See all articles