[Python-ideas] Delay evaluation of annotations
Terry Reedy
tjreedy at udel.edu
Thu Sep 22 23:07:13 EDT 2016
On 9/22/2016 10:54 PM, Chris Angelico wrote:
> On Fri, Sep 23, 2016 at 12:35 PM, Steven D'Aprano <steve at pearwood.info> wrote:
>> The straight-forward and simple way of writing a recursive spam()
>> function surprises beginners, but they might go years or their entire
>> career without running into a situation where they are caught by
>> surprise. After all, it is rare for productuon code to rename functions,
>> and rarer still to do it to recursive functions:
>>
>> func = spam
>> spam = something_else()
>> func() # why does the recursion not work???
>>
>> In production code, that sort of thing almost never happens.
>
> There's actually one very common technique involving rebinding functions.
>
> @count_calls
> def mergesort(lst):
> mid = len(lst) // 2
> if not mid: return lst
> return merge(mergesort(lst[..mid]), mergesort(lst[mid..]))
>
> *Obviously* this is recursive. But if you used some magic that said
> "call the function that's currently being called", you'd be bypassing
> the count_calls decoration (which would presumably work by creating a
> wrapper function). Yes, it may defeat some potential optimizations (eg
> tail recursion optimization), but it enables all this flexibility.
@memoize is another decorator that depends on recursion by name.
> So we _need_ to have this kind of rebind available, and not just for experts.
>
>> In the meantime, I'll usually just write my recursive functions the
>> old-fashioned normal way.
>
> As will I. Of course, people are welcome to work differently, just as
> long as I never have to write tests for their code, or refactor
> anything into a decorator, or anything like that. I want the
> POWAH!!!!! :)
>
> ChrisA
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
--
Terry Jan Reedy
More information about the Python-ideas
mailing list