Python Contextlib
-
Verwendung von die
with
-Anweisung als Kontextmanager in Python -
Verwendung von den Function Decorator
@contextmanager
in Python
Manchmal verwenden wir einige Ressourcen wie eine Datei. Wir öffnen es und vergessen, es zu schließen, wenn wir mit der Arbeit fertig sind.
Es ist eine schlechte Programmierpraxis und verursacht Probleme, wenn zu viele Dateien geöffnet sind. Selbst wenn wir diese Ressourcen nicht mehr benötigen, kann das Programm sie auf unbestimmte Zeit erwerben.
Diese Situation verursacht Speicherverluste. Um diese Dinge automatisch zu handhaben, hat Python Kontextmanager.
Sie kümmern sich um die Verwaltung der Ressourcen. Die contextlib
ist eine Python-Bibliothek, die Dienstprogramme für die Ressourcenverwaltung mit dem Schlüsselwort with
bereitstellt.
Verwendung von die with
-Anweisung als Kontextmanager in Python
In Python verwaltet die with
-Anweisung Ressourcen und behandelt Ausnahmen. Es funktioniert also als Kontextmanager.
Wenn der Code eine with
-Anweisung erreicht, weist er vorübergehend Ressourcen zu. Die zuvor erworbenen Ressourcen werden freigegeben, wenn der with
-Anweisungsblock seine Ausführung beendet.
Im folgenden Code haben wir eine Datei erstellt und geöffnet. Die im with
-Block erworbenen Ressourcen werden freigegeben, wenn die Kontrolle außerhalb des with
-Blocks liegt.
Beispielcode:
with open("file.txt", "w+") as f:
print("File Opened")
Ausgabe:
File Opened
Wir können auch die Kontextmanager-Funktionalität in unsere Programme integrieren. Dazu muss unsere Klasse die Methoden __enter__()
und __exit__()
haben.
Um den Ablauf des Kontextmanagers zu verstehen, haben wir den folgenden Code mit der Anweisung print
ausgeführt, die ausgeführt wird, wenn die Steuerung an den jeweiligen Block übergeben wird.
Beispielcode:
class MyContextManager:
def __init__(self):
print("In init method")
def __enter__(self):
print("In enter method")
def __exit__(self, exc_type, exc_value, exc_traceback):
print("In exit method")
with MyContextManager() as m:
print("With block")
Ausgabe:
In init method
In enter method
With block
In exit method
Verwendung von den Function Decorator @contextmanager
in Python
Eine andere Methode, um eine Funktion als Kontextmanager zu erstellen, ist die Verwendung des Funktionsdekorators @contextmanager
. Ein Decorator ist eine Funktion, die eine andere Funktion als Eingabe verwendet, ihre Funktionalität erweitert/ihr Verhalten ändert und eine andere Funktion als Ausgabe zurückgibt.
Wir müssen die separate Klasse oder die Funktionen __enter__()
und __exit__()
nicht schreiben, wenn wir diesen Decorator verwenden. Wir müssen den Kontextmanager aus dem Modul contextlib
importieren.
Wir verwenden das @contextmanager
über unserer Funktion. Das Schlüsselwort yield
ist wie die return
-Anweisung, die für die Rückgabe von Werten/Kontrollen verwendet wird.
Alles vor dem Schlüsselwort yield
wird als Abschnitt __enter__
betrachtet, und alles nach dem Schlüsselwort yield
wird als Abschnitt __exit__
betrachtet.
Beispielcode:
from contextlib import contextmanager
@contextmanager
def MyContextManager():
print("In enter method")
yield
print("In exit method")
with MyContextManager() as m:
print("With block")
Ausgabe:
In enter method
With block
In exit method
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn