[Python-ideas] PEP 563: Postponed Evaluation of Annotations, first draft
Nick Coghlan
ncoghlan at gmail.com
Tue Sep 12 07:17:23 EDT 2017
More information about the Python-ideas mailing list
Tue Sep 12 07:17:23 EDT 2017
- Previous message (by thread): [Python-ideas] PEP 563: Postponed Evaluation of Annotations, first draft
- Next message (by thread): [Python-ideas] PEP 563: Postponed Evaluation of Annotations, first draft
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 12 September 2017 at 11:45, Steven D'Aprano <steve at pearwood.info> wrote: >> Rejected Ideas >> ============== >> >> Keep the ability to use local state when defining annotations >> ------------------------------------------------------------- >> >> With postponed evaluation, this is impossible for function locals. > > Impossible seems a bit strong. Can you elaborate? I actually agree with this, and I think there's an alternative to string evaluation that would solve the "figure out the right globals() & locals() references" problem in a more elegant way: instead of using strings, implicitly compile the annotations as "lambda: <expr>". You'd still lose the ability to access class locals (except by their qualified name), but you'd be able to access function locals just fine, since the lambda expression would implicitly generate the necessary closure cells to keep the relevant local variables alive following the termination of the outer function. Unfortunately, this idea has the downside that for trivial annotations, defining a lambda expression is likely to be *slower* than evaluating the expression, whereas referencing a string constant is faster: $ python -m perf timeit "int" ..................... Mean +- std dev: 27.7 ns +- 1.8 ns $ python -m perf timeit "lambda: int" ..................... Mean +- std dev: 66.0 ns +- 1.7 ns $ python -m perf timeit "'int'" ..................... Mean +- std dev: 7.97 ns +- 0.32 ns Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message (by thread): [Python-ideas] PEP 563: Postponed Evaluation of Annotations, first draft
- Next message (by thread): [Python-ideas] PEP 563: Postponed Evaluation of Annotations, first draft
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list