
On Sun, Oct 31, 2021 at 7:01 PM Jonathan Fine <jfine2358@gmail.com> wrote:
Hi
I've just had a brainwave that may give an even less invasive implementation of PEP 671. It relies on every function having a dict, as provided by https://www.python.org/dev/peps/pep-0232/.
Consider: def fn(a, b, c): pass fn.__wibble__ = 123 fn.__wibble__ # Give 123, of course.
Now consider: @wibble def fn(a, b, c=None): '''Usual docstring goes here.''' if c is None: c = [] '#wibble'
return c.extend([a, b])
The @wibble decorator sets fn.__wibble__ to point to the end of the line just before '#wibble'.
Interesting. How's it going to do that? What's it going to look at in the function to find a bare string? They get completely optimized out during compilation.
We can now define Help(fn) to produce something like: fn(a, b, c=None) Usual docstring goes here. -- if c is None: c = []
There we go. The functionality asked for, in a way that works with existing Python. If nothing else, we can use this for experiments to explore the idea. Often in Python there are functions whose source is self-explanatory.
That's one small part of it. You haven't improved the signature, you haven't removed the need for sentinels, but you have at least added some source code to help(fn). Assuming that the source code is indeed available, that is; wouldn't work if the function came from a .pyc file. ChrisA