[Python-ideas] Delay evaluation of annotations
Nick Coghlan
ncoghlan at gmail.com
Thu Sep 22 23:23:52 EDT 2016
On 23 September 2016 at 13:06, Steven D'Aprano <steve at pearwood.info> wrote:
> On Thu, Sep 22, 2016 at 07:21:18PM +0000, אלעזר wrote:
>> "Expression" is something that you need its value right
>> now, and "annotation" is something that, well, annotates the code you see
>> right now.
>
> Right. In the case of Python, function annotations **do** have a runtime
> effect: the expressions are evaluated, and the evaluated results are
> assigned in function.__annotations__ and made available for runtime
> introspection.
>
> Don't think that function annotations are **only** for the static type
> checker. Python is a much richer language than that!
If folks are after a simple non-type-checking related example of
annotation usage, the "begins" CLI library is a decent one:
https://pypi.python.org/pypi/begins
That lets you supply command line help for parameters as annotations:
============
In Python3, any function annotations for a parameter become the
command line option help. For example:
>>> import begin
>>> @begin.start # doctest: +SKIP
... def run(name: 'What, is your name?',
... quest: 'What, is your quest?',
... colour: 'What, is your favourite colour?'):
... pass
Will generate command help like:
usage: holygrail_py3.py [-h] -n NAME -q QUEST -c COLOUR
optional arguments:
-h, --help show this help message and exit
-n NAME, --name NAME What, is your name?
-q QUEST, --quest QUEST
What, is your quest?
-c COLOUR, --colour COLOUR
What, is your favourite colour?
============
It's not a substitute for something like click or argparse when it
comes to more complex argument parsing, but it's a good example of the
kind of simple pseudo-DSL folks have long been able to create with
annotations independently of the type hinting use case.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list