[Python-Dev] anonymous blocks
Brian Sabbey
sabbey at u.washington.edu
Tue Apr 19 23:48:01 CEST 2005
Guido van Rossum wrote:
>> Why not have the block automatically be inserted into acquire's argument
>> list? It would probably get annoying to have to define inner functions
>> like that every time one simply wants to use arguments.
>
> But the number of *uses* would be much larger than the number of
> "block decorators" you'd be coding. If you find yourself writing new
> block decorators all the time that's probably a sign you're too much
> in love with the feature. :-)
Ok, but in explanations of how to use such blocks, they appear about
equally often. They will therefore seem more difficult to use than they
have to.
> I don't like implicit modifications of argument lists other than by
> method calls. It's okay for method calls because in the x.foo(a) <==>
> foo(x, a) equivalence, x is really close to the beginning of the
> argument list.
There is a rough equivalence:
@foo(x):
block
<==>
@foo(block, x)
Of course, the syntax does not allow such an equivalence, but conceptually
it's there.
To improve the appearance of equivalence, the block could be made the last
element in the argument list.
> And your proposal would preclude parameterless block decorators (or
> turn them into an ugly special case), which I think might be quite
> useful:
>
> @forever:
> infinite loop body
>
> @ignore:
> not executed at all
>
> @require:
> assertions go here
>
> and so on.
>
> (In essence, we're inventing the opposite of "barewords" in Perl here, right?)
I don't understand this. Why not:
@forever():
infinite loop body
etc.? The same is done with methods: x.foo() (or am I missing
something?). I actually prefer this because using '()' make it clear that
you are making a call to 'forever'. Importantly, 'forever' can throw
exceptions at you. Without the '()' one does not get this reminder.
I also believe it is more difficult to read without '()'. The call to the
function is implicit in the fact that it sits next to '@'.
But, again, if such argument list augmentation were done, something other
than '@' would need to be used so as to not conflict with function
decorator behavior.
-Brian
More information about the Python-Dev
mailing list