Was ist 'Variable' zugewiesen, in 'mit Ausdruck als Variable'?

8

Von Lernpython:

  

Das Grundformat der with-Anweisung sieht so aus, mit einem   optionaler Teil in eckigen Klammern hier:

%Vor%      

Hier wird angenommen, dass expression ein Objekt zurückgibt, das das Objekt unterstützt   Kontext-Management-Protokoll (mehr zu diesem Protokoll in einem Moment).    Dieses Objekt kann auch einen Wert zurückgeben, der dem Namen variable zugewiesen wird, wenn die optionale as-Klausel vorhanden ist.

     

Beachten Sie, dass dem variable nicht unbedingt das Ergebnis von zugewiesen wird   die expression ; Das Ergebnis von expression ist das Objekt, das   unterstützt das Kontextprotokoll und das variable kann zugewiesen werden   etwas anderes soll in der Aussage verwendet werden.

expression wird für ein Kontextmanagerobjekt ausgewertet.

Was ist variable zugewiesen? Das Zitat sagt nur, dass es kein Kontextmanagerobjekt ist.

Ruft die Zuweisung zu variable eine Methode einer Kontextmanagerklasse auf, um den tatsächlichen Wert zu erzeugen, der variable zugeordnet ist?

Danke.

    
Tim 14.09.2017, 17:32
quelle

2 Antworten

10

Was von __enter__ zurückgegeben wird. In der Dokumentation zur Methode __enter__ von Kontextmanagern :

  

contextmanager.__enter__()

     

Geben Sie den Laufzeitkontext ein und geben Sie entweder dieses Objekt oder ein anderes Objekt zurück, das sich auf den Laufzeitkontext bezieht. Der von dieser Methode zurückgegebene Wert ist an den Bezeichner in der as -Klausel von with -Anweisungen gebunden, die diesen Kontextmanager verwenden.

(Betonung meiner)

Das Ergebnis des Aufrufs von __enter__ könnte sehr gut ein Kontextmanager sein, nichts in der Spezifikation verbietet dies. Es könnte natürlich ein anderes Objekt sein, das mit dem Laufzeitkontext in Zusammenhang steht, wie der Dokumentstatus angibt.

Objekte, die sich selbst von __enter__ zurückgeben, können immer wieder als Kontextmanager verwendet werden. file Objekte , zum Beispiel:

%Vor%

Nicht, dass das vorherige viel Sinn ergeben hätte, nur um den Punkt klar zu machen.

    
Jim Fasarakis Hilliard 14.09.2017, 17:38
quelle
8

Ihr Objekt kann als Kontextmanager fungieren, wenn es beide __enter__ bereitstellt. und __exit__ . Das von __enter__ zurückgegebene Objekt ist an das Objekt gebunden, das Sie im as -Teil der with -Anweisung angeben:

%Vor%     
Blender 14.09.2017 17:38
quelle

Tags und Links