[Python-3000] Adaptation and type declarations

Jim Jewett jimjjewett at gmail.com
Mon Apr 10 22:13:20 CEST 2006


On 4/10/06, Guido van Rossum <guido at python.org> wrote:

> The only syntax that is acceptable to me ... would look like

> def fn(a: Seq, b: Index, c: Text = "default"): ...

> where Seq, Index and Text can be expressions (the main problem with
> the syntax you propose is that the type can't be much more than an
> identifier before it gets ambiguous or unreadable).

I agree that putting the identifier after the type (and wrapping to
one parameter per line) allows for a longer expression.

On the other hand, it also allows for a *much* longer expression,
which becomes unreadable anyhow.  Whether this would be enough of a
problem in practice to justify requiring identifiers ... I'm not sure.
 Maybe the actual usage of conditional expressions will help answer
that.

> 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)
        ...

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.

-jJ


More information about the Python-3000 mailing list