[Python-3000] Draft pre-PEP: function annotations
Collin Winter
collinw at gmail.com
Thu Aug 10 03:02:08 CEST 2006
On 8/9/06, Talin <talin at acm.org> wrote:
> Collin Winter wrote:
> > There is no worry that these libraries will assign semantics at
> > random, or that a variety of libraries will appear, each with varying
> > semantics and interpretations of what, say, a tuple of strings
> > means. The difficulty inherent in writing annotation interpreting
> > libraries will keep their number low and their authorship in the
> > hands of people who, frankly, know what they're doing.
>
> I find this assumption extremely dubious.
Why? This is something Guido and I have discussed and agreed on.
What's your reasoning?
> > In pseudo-grammar, parameters now look like
> > ``identifier [: expression] [= expression]``. That is, type
> > annotations always precede a parameter's default value and both type
> > annotations and default values are optional. Just like how equal
> > signs are used to indicate a default value, colons are used to mark
> > annotations. All annotation expressions are evaluated at the time
> > the function is compiled.
>
> Only one annotation per parameter? What if I want to specify both a
> docstring *and* a type constraint?
If the grammar were something like ``identifier [: expression]* [=
expression]`` instead, it would be possible to add multiple
annotations to parameters. But what of the return value? Would you
want to write
def foo() -> Number -> "total number of frobnications":
...
I wouldn't.
The way to make this explicit, if you need it, would be something like this:
def bar(a: ("number of whatzits", Number)) -> ("frobnication count", Number):
then use a decorator to determine which annotation-interpreting
decorators are assigned which annotations, something like this,
perhaps:
@chain(annotation_as_docstring, annotation_as_type)
def bar(a: ("number of whatzits", Number)) -> ("frobnication count", Number):
Collin Winter
More information about the Python-3000
mailing list