More on "with" statement

Daniel Dittmar daniel at dittmar.net
Fri Jul 13 21:15:00 CEST 2001


> I can only think of two reasons to use it.
> 
>     1) You're a lazy typist. (Or haven't learned to cut and paste)
> 
>     2) You are generally concerned that multiple references to the
>      same object with complex, multilevel access might be confusing
>     to the reader or not optimized by the compiler.

There's a third one: control blocks give visual structure to a method,
making the parts more easily recognizable

with sys.stdout:
    .write (...)
    .write (...)
doSomethingElse ()
with sys.stdout:
    .write (...)
    .write (...)

is at least to me more easily scannable than

write = sys.stdout.write
write (...)
write (...)
doSomethingElse ()
write (...)
write (...)

Of course, the second version is faster, because the lookup of the write
method is cached, not of stdout.

Admittedly, this is highly a matter of taste. To some, a few blank lines
already do the trick. Others will insist that readability is only
achieved by

sys.stdout.write (...)
sys.stdout.write (...)
doSomethingElse ()
sys.stdout.write (...)
sys.stdout.write (...)
# explicit is better than implicit

Daniel



More information about the Python-list mailing list