[Python-ideas] adding an __exec__ method to context managers?

geremy condra debatem1 at gmail.com
Tue Oct 13 06:47:45 CEST 2009


On Mon, Oct 12, 2009 at 11:09 PM, Carl Johnson
<cmjohnson.mailinglist at gmail.com> wrote:
> This is definitely an idea that python-ideas has seen before. Just a
> couple months ago, when the syntax of "with" was being changed to
> allow for "with a, b, c" this was kicked around as a possible
> improvement to the with statement.
>
> Taking a step back, it seems like what you really want is some easy
> way to create callbacks, just like Ruby blocks or the new Objective-C
> blocks. There are a number of ways this could be done:
>
> 1. Some kind of multiline lambda. (This is generally considered to be
> unpythonic.)
>
> 2. Relaxing the restrictions on decorators so that, eg. this, is legal:
>
>  @pymp.parallel_for(range(100))
>  def _(mt):
>
>    for i in mt.iter:
>
>       dostuff1(i)
>
>       with mt.critical:
>          dostuff2(i)
>
> Then you can have it auto-call itself and ignore the fact that _ will
> be the result (presumably None) and not a callable.
>
> 3. Some sort of "out of order operation" signal, as was batted around
> on the list a while back:
>
> result = pymp.parallel_for( ~~DEFINE_ME_NEXT~~, range(100))
> def DEFINE_ME_NEXT(mt): ...
>
> There are many potential ways to spell that.
>
> 4. Some modification to the "with" statement, as you are proposing.
> The resistance that you will face with this idea is that it is
> significantly different from how "with" works now, since it does not
> create a block at all.
>
>
> Frankly I think this list is going to face proposals for some block
> substitute or another every couple months between now and whenever
> Python finally allows for some more readable way of passing functions
> to other functions.
>
> — Carl Johnson

I agree, and I'd like to hear more about what you think ought to
be done about the issue.

Geremy Condra



More information about the Python-ideas mailing list