Das Verständnis und den Kontext-Manager mit Python

Das Verständnis und den Kontext-Manager mit Python

Was ist der Kontext-Manager?

  • Manager ist ein Kontextobjekt Wrapper beliebigen Code-Block.
  • Der Kontext-Manager Zugriff auf Kontextmanager gewährleisten, jedes Mal, wenn der Code Konsistenz der Ausführung.
  • Wenn Sie die Kontextmanager verlassen, können damit verbundene Ressourcen ordnungsgemäß recycelt werden.

Einfach Manager Put-Kontext with 语句

Die Vorteile der Verwendung eines Kontext-Manager

  • Es kann in einem eleganteren Weg, die Operation (create / acquire / release) Ressourcen wie Dateioperationen, Datenbankverbindung sein;

  • Muss in der Lage, die Umsetzung von Ausstieg Maßnahmen, um sicherzustellen, mit Aussagen durch das Schreiben von Code, den Code übersichtlicher zu machen, gehen Sie nicht die Datei zu schließen.

  • Es kann in einem eleganteren Weg, um Ausnahmen zu behandeln.

Verwenden Sie den Kontextmanager

Um das zu erreichen, ihre Verwaltung eines solchen Kontext, müssen Sie zunächst das Kontextmanagementprotokoll kennen.

Einfach ausgedrückt, die in einer Klasse, Instanz dieser Klasse ist ein Kontext - Manager.实现了 enter 和__exit__的方法

# 上下文管理协议
class Sample:
    def __enter__(self):
        print("enter")
        # 获取资源
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 释放资源
        print("exit")

    def do_something(self):
        print("doing something")


with Sample() as sample:
    sample.do_something()

Ausgang:

enter
doing something
exit

Klar aus diesem Beispiel zu sehen ist, wenn das Schreiben von Code, oder kann in Verbindung __enter__ Ressourcen erworben werden, und die Ressource in der __exit__ abgeschrieben.

contextlib vereinfachten Kontext-Manager

# 让普通函数也可以使用上下文管理, 前提条件是add函数必须是生成器函数,且只有yield语句
from contextlib import contextmanager


@contextmanager
def add(x, y):
    print('__enter__')  # 第一步:调用__enter__
    yield x + y  # 第二步:返回__enter__函数的返回值给obj对象
    print('__exit__')  # 第四步:调用__exit__


with add(1, 2) as obj:
    print(obj)  # 第三步:执行上下文语句块

Ausgang:

__enter__
3
__exit__

  • contextlib Python Standard-Bibliothek-Modul ist eine benutzerfreundliches Tool Kontextmanagementmodul zur Verfügung zu stellen;
  • Es wird von der Dekorateur implementiert, keine Klasse und Verwendung __enter__ und __exit__ diese beiden Methoden erstellen müssen, ist es bequemer, als mit der Aussage;
  • @contextmanager ist ein decorator dekorateur, Generator, der einen Generator aufnimmt, wobei der Generator in der Ausbeute mit dem Wert der Variablen zugewiesen ... as, und mit einem normalen Satz durchgeführt wird;
  • auch eine dekorative Dekorateur nach @contextmanager Schließen Schließen () kann das Objekt Objektkontext wird, dann den mit Anweisung (sofern dieses Objekt in der Nähe nennen kann () -Methode!);

Referenz: Kontext - Manager

Veröffentlicht 29 Originalarbeiten · erntete Lob 19 · Ansichten 1310

Ich denke du magst

Origin blog.csdn.net/s1156605343/article/details/104736418
Empfohlen
Rangfolge