On Sun, Apr 19, 2020 at 10:50 PM Alex Hall <alex.moj...@gmail.com> wrote:

> On Sun, Apr 19, 2020 at 5:59 PM David Mertz <me...@gnosis.cx> wrote:
>
>>

> I think you've missed on alternative.  Well, it's a variation on "status
>> quo":  Use a silly magic helper function like my Q() or Alex' dict_of() in
>> his sorcery library.
>>
>>
> [...]

>
> So no, this is not a problem that can be solved by a function in current
> Python.
>
> On the other hand, we can change Python to make writing functions like
> that safe and easy. If code objects held a mapping from bytecode positions
> to AST nodes (which in turn would ideally know their source code, but
> that's not essential, e.g. it's not needed for the keyword argument stuff)
> then writing Q() and other neat magical functions (see the rest of sorcery
> for examples) would be relatively easy and reliable. And it would have
> other great applications, like making [tracebacks more detailed](
> https://github.com/ipython/ipython/pull/12150). I'd be really excited
> about that, and I've thought about proposing it here before. But it might
> be opening Pandora's box, and I expect there'd be plenty of (probably
> valid) objections.
>

Exposing the AST is probably overkill, but we could probably come up with a
different way to give Python users easy access to the argument names. For
example, suppose you could define functions like this:

```
foo = 1
bar = 2

# Note the ***, different from **
def Q(***args_with_names):
    return args_with_names


assert Q(foo, bar) == dict(foo=foo, bar=bar)


def debug_print(***args_with_names):
    print(args_with_names)


debug_print(foo, bar)
# prints {"foo": 1, "bar": 2}
```

Then you would only need a few small instances of magical syntax. Most
users would never need to know what `***` means. If they come across a
function call like `func(**Q(foo, bar))`, they can at least tell that
keyword arguments are being passed. And the function Q would be easy to
google or inspect with help(Q) in the shell. The syntax for calls and dicts
wouldn't need to be complicated further.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/65PXMHTXJRVDV74IUWK6IIV7UXBVMRO6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to