[Python-Dev] Python FAQ: Why doesn't Python have a "with" statement?

Alex Martelli aleaxit at gmail.com
Mon Jun 16 01:12:46 CEST 2008


+1 on updating the FAQ.  Maybe we could even have it notice that a
read-only version of the desired semantic for 'with' is easily hacked
with the *current* semantic of 'with'...:

@contextlib.contextmanager
def readonly(anobj):
    caller_globals = sys._getframe(2).f_globals
    saved_globals = caller_globals.copy()
    caller_globals.update((n, getattr(anobj, n)) for n in dir(anobj))
    yield
    caller_globals.clear()
    caller_globals.update(saved_globals)

and then, of course,

with readonly(someobj): ...

(local variables take precedence, and in particular all assignments
define local variables, as usual -- but you can say e.g. 'zz' to mean
'someobj.zz', if you're sufficiently keen on giving up the advantage
of having many well-separated namespaces;-).


Alex


On Sat, Jun 14, 2008 at 11:16 PM, Cesare Di Mauro <cesare at pronto.it> wrote:
> In data 15 giugno 2008 alle ore 02:24:43, Greg Ewing <greg.ewing at canterbury.ac.nz> ha scritto:
>
>> ...and which should *not* be used in most cases, for
>> the same reason.
>>
>> All those tutorials that start out with 'from something
>> import *' are doing a lot of harm to the impressionable
>> minds of new programmers, IMO.
>
> OK, but nobody have questioned about removing 'from something import *' just to help noobs...
> That's because the instruction *can* be useful in *some* (hopely limited, but existent) contexts.
> It's a matter of programmer choises.
>
> Anyway (and dropping my proposal), I think that the FAQ needs to be changed to advice that the
> 'with' keyword in Python makes a completely different kind of work.
>
> Cesare
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/aleaxit%40gmail.com
>


More information about the Python-Dev mailing list