Da ich gerade den entsprechenden Thread nicht finde, hier ein Nachtrag:
Python erlaubt ab Version 2.5 die Nutzung lokaler Kontextinformationen. D.h. ein Kontext, der einmal mit einem Block eingeführt wird, gilt für alle darin liegenden Anweisungen.
Das Modul 'decimal' stellt dazu den Präzisionskontext bereit. Mit der Anweisung: from __future__ import with_statement # ab 2.6 nicht mehr nötig with localcontext(Context(prec=16)): ... werden 16-stellige Dezimalzahlen statt 28-stelliger verwendet.
Man kann für beliebige eigene Klassen auch eigene Kontextmanager schreiben. So lassen sich Multithread-Programme einfacher mit dem 'Lock'-Kontext schreiben, und das unlock() entfällt dabei, da der Kontext automatisch beim Verlassen des Blocks zerstört wird. Also wie ein Destruktor eines auf dem Stack angelegten Objekts, aber auf Ebene des Blocks.
Ich finde zwar nicht alle Neuerungen von Python 2.5 gut (zu viele Ausdrücke mit Klammern), aber die Kontextgeschichten sind gut gelungen.
Josef