[Python-3000] Adaptation and type declarations

Tim Hochberg tim.hochberg at ieee.org
Mon Apr 10 23:03:14 CEST 2006


Guido van Rossum wrote:
> On 4/10/06, Jim Jewett <jimjjewett at gmail.com> wrote:
> 
>>On 4/10/06, Guido van Rossum <guido at python.org> wrote:
>>
>>>A completely separate issue is what kind of objects Seq, Index and
>>>Text would be; but that's a discussion we have separate from the
>>>syntactic discussion.
>>
>>What do you mean?  The only question that leaps out at me is whether
>>they should be predicates or constructors.  In other words, should
>>
>>    def f(a:Seq): ...
>>
>>mean something closer to
>>
>>    def f(a):
>>        assert Seq(a)
>>        ...
>>
>>or
>>
>>    def f(a):
>>        a=Seq(a)
>>        ...
> 
> 
> It should mean neither. As I tried to say, the *only* semantics is
> that the value of the expression is accessible through the
> __signature__ attribute of the function. It is then up to the
> decorator to decide what it means.
> 
> 
>>If adaptation is light enough to be useful, then I can't see any
>>reason to prefer the first.
>>
>>    def f(a:0<a<10): ...
>>
>>isn't *that* much cleaner than whichever of
>>
>>    def f(a:clip_to_int_range(0,10)): ...
>>    def f(a:int_in_range(0,10)): ...
>>    def f(a:clip_to_number_range(0,10)): ...
>>    def f(a:number_in_range(0,10)): ...
>>
>>was actually intended.
> 
> 
> That's not something I had considered. It would have to turn the
> expression into an implicit lambda (or an AST), which isn't something
> we should do lightly, and which conflicts with other proposed uses,
> where the value of the expression is made available to the decorator
> -- the value of '0<a<10' is not available until f is *called*.

This seems like it ties into the AST access thread. If some way of 
quoting little chunks of code shows up, this becomes a non-problem since 
you can then do:

     def f(a:`0<a<10`)

[I'm using backquotes for the moment since that's the only syntax I've 
seen proposed] Then the responsibility falls to decorator to something 
sensible with the code fragment. Turning the type specifier into some 
sort of implicit lambda seems like a mess otherwise.

Regards,

-tim





More information about the Python-3000 mailing list