Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erläuterung der Anwendungsbeispiele von with und contextlib im Python-Grundlagen-Tutorial
Dieser Artikel stellt hauptsächlich die Verwendung von with und contextlib in Python vor. Er analysiert detailliert die Funktionen, Verwendungsmethoden und zugehörigen Vorsichtsmaßnahmen in Form von Beispielen.
Die Beispiele in diesem Artikel beschreiben die Verwendung von with und contextlib in Python. Geben Sie es als Referenz an alle weiter. Die Details lauten wie folgt:
Im normalen Codierungsprozess wird häufig das With-Szenario verwendet (Öffnen einer Datei zur Dateiverarbeitung und anschließendes implizites Ausführen des Schließens). Dateihandle, das auch für Sockets geeignet ist) Klassen, diese Klassen bieten Unterstützung für with):
with file('test.py','r') as f : print f.readline()
Die Funktion von with ähnelt try...finally ... und stellt einen Kontextmechanismus bereit. Die Klasse, die die with-Anweisung verwenden soll, muss zwei integrierte Funktionen bereitstellen: __enter__ und __exit__. Ersteres wird ausgeführt, bevor der Hauptcode ausgeführt wird, und letzteres wird ausgeführt, nachdem der Hauptcode ausgeführt wird. Die Variablen nach as werden in der Funktion __enter__ zurückgegeben. Anhand des folgenden Codeausschnitts und der Kommentare können Sie die Verwendung von __enter__ und __exit__ klar verstehen:
#!encoding:utf-8 class echo : def output(self) : print 'hello world' def __enter__(self): print 'enter' return self #返回自身实例,当然也可以返回任何希望返回的东西 def __exit__(self, exception_type, exception_value, exception_traceback): #若发生异常,会在这里捕捉到,可以进行异常处理 print 'exit' #如果改__exit__可以处理改异常则通过返回True告知该异常不必传播,否则返回False if exception_type == ValueError : return True else: return False with echo() as e: e.output() print 'do something inside' print '-----------' with echo() as e: raise ValueError('value error') print '-----------' with echo() as e: raise Exception('can not detect')
Laufergebnisse:
contextlib ist ein Modul, das die with-Anweisung stärkt und einen Kontextmechanismus bereitstellt. Es wird über Generator implementiert. Die Kontextverwaltung durch die Definition von Klassen und das Schreiben von __enter__ und __exit__ ist nicht schwierig, aber mühsam. Der Kontextmanager in contextlib dient als Dekorator, um einen Kontextverwaltungsmechanismus auf Funktionsebene bereitzustellen. Häufig verwendete Frameworks sind wie folgt:
from contextlib import contextmanager @contextmanager def make_context() : print 'enter' try : yield {} except RuntimeError, err : print 'error' , err finally : print 'exit' with make_context() as value : print value
contextlib hat auch zwei wichtige Dinge: eines ist verschachtelt und das andere ist geschlossen. Ersteres wird zum Erstellen verschachtelter Kontexte verwendet. und letzteres Wird verwendet, um Ihnen bei der Ausführung der definierten Schließfunktion zu helfen. Aber verschachtelt ist veraltet, denn mit kann bereits über mehrere Kontexte direkt verschachtelt werden. Hier ist ein Beispiel:
from contextlib import contextmanager from contextlib import nested from contextlib import closing @contextmanager def make_context(name) : print 'enter', name yield name print 'exit', name with nested(make_context('A'), make_context('B')) as (a, b) : print a print b with make_context('A') as a, make_context('B') as b : print a print b class Door(object) : def open(self) : print 'Door is opened' def close(self) : print 'Door is closed' with closing(Door()) as door : door.open()
Laufendes Ergebnis:
Zusammenfassung: Python Da wir normalerweise an einige frühere Programmiergewohnheiten von C++ oder Java gewöhnt sind, übersehen wir diese guten Mechanismen oft. Daher müssen wir lernen, diese Python-Funktionen zu nutzen, um die von uns geschriebenen Python-Programme mehr wie Python zu machen.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Anwendungsbeispiele von with und contextlib im Python-Grundlagen-Tutorial. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!