[Python-ideas] Before and after the colon in funciton defs.
Terry Reedy
tjreedy at udel.edu
Wed Sep 21 05:36:35 CEST 2011
On 9/20/2011 1:09 PM, Guido van Rossum wrote:
> On Tue, Sep 20, 2011 at 9:59 AM, Terry Reedy<tjreedy at udel.edu> wrote:
>> The problem with an earlybind statement in the body is that it is in the
>> body, which should be runtime stuff. I would prefer something in the header.
>> A semi-colon or other char would be sufficient syntactically:
>>
>> def f(a; len, alist=[]): alist.append(a); return len(alist)
>>
>> where a bare identifier like 'len' *means* 'len=len'.
>
> I would be much more interested in a tweak to the language semantics
> where the compiler is allowed to assume that "len means len" if there
> is no global assignment to it in a module. There are many past threads
> about this topic. It should make the feature proposed here unnecessary
> -- at least its use for manual micro-optimizations, which I mostly
> find an offense to the reader (even in the shortened form proposed
> here).
For those not party to the earlier threads, this alternate proposal
would bread any code that monkeypatches an imported-module-only override
of a builtin, something like:
def mylen(o): return <whatever>
import mod; mod.len = mylen
I do not mind the semantic change itself, and it would benefit nearly
all code, including module-level code would not be affected by def
gimmicks. Some issues I see that perhaps were discussed, but I do not
remember: 1) module.__setattr__ should then raise an exception at such
attempts; 2) it makes the language more context sensitive than it
currently is; 3) compile() should apply the rule even for single
statements or even expressions.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list