Waarvoor wordt het python-sleutelwoord with gebruikt?

Waarvoor wordt het python-zoekwoord “with” gebruikt?

Voorbeeld van: http://docs.python.org/tutorial/inputoutput.html

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

Antwoord 1, autoriteit 100%

In python wordt het sleutelwoord with gebruikt bij het werken met onbeheerde bronnen (zoals bestandsstreams). Het is vergelijkbaar met de using-instructie in VB.NET en C#. Hiermee kunt u ervoor zorgen dat een resource wordt “opgeruimd” wanneer de code die deze gebruikt, is voltooid, zelfs als er uitzonderingen worden gegenereerd. Het biedt ‘syntactische suiker’ voor try/finally blokken.

Van Python-documenten:

De with-instructie verduidelijkt code die voorheen try...finally-blokken zou gebruiken om ervoor te zorgen dat de opschooncode wordt uitgevoerd. In deze sectie zal ik de verklaring bespreken zoals deze vaak zal worden gebruikt. In de volgende sectie zal ik de implementatiedetails onderzoeken en laten zien hoe objecten te schrijven voor gebruik met deze verklaring.

De with-instructie is een control-flow-structuur waarvan de basisstructuur is:

with expression [as variable]:
    with-block

De uitdrukking wordt geëvalueerd en moet resulteren in een object dat het contextbeheerprotocol ondersteunt (dat wil zeggen, de methoden __enter__() en __exit__() heeft).

Update vaste VB-toelichting volgens de opmerking van Scott Wisniewski. Ik verwarde inderdaad with met with.


Antwoord 2, autoriteit 87%

Uitleg van de blog Preshing on Programming:

Het is handig wanneer u twee gerelateerde bewerkingen heeft die u wilt
uitvoeren als een paar, met een blok code ertussen. De klassieke
voorbeeld is het openen van een bestand, het manipuleren van het bestand, dan
sluiten:

 with open('output.txt', 'w') as f:
     f.write('Hi there!')

Het bovenstaande met statement zal het bestand automatisch sluiten na de
genest codeblok. (Lees verder om precies te zien hoe de close
optreedt.) Het voordeel van het gebruik van een met-statement is dat het is
gegarandeerd om het bestand te sluiten, ongeacht hoe het geneste blok wordt afgesloten. Indien
een uitzondering optreedt voor het einde van het blok, zal het de . sluiten
bestand voordat de uitzondering wordt opgevangen door een buitenste uitzonderingshandler. Indien
het geneste blok zou een return-statement bevatten, of een continue of
break-instructie, de with-instructie zou het bestand automatisch sluiten
in die gevallen ook.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

18 + twelve =

Other episodes