Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erläuterung der Anwendungsbeispiele von with und contextlib im Python-Grundlagen-Tutorial

Ausführliche Erläuterung der Anwendungsbeispiele von with und contextlib im Python-Grundlagen-Tutorial

巴扎黑
巴扎黑Original
2017-08-09 11:02:251657Durchsuche

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!

Stellungnahme:
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