I could absolutely see a lot of use for this when it comes to rebinding names in callbacks and the like.

for i in range(10):
  callLater(delay, lambda i=: print(i))

But with this being a very common scenario for such a feature being needed, we'd see a lot of confusion with how much that looks like a walrus operator.

I am +1 on the feature, but -1 on the syntax.

On Thu, Apr 16, 2020 at 12:45 PM Steven D'Aprano <steve@pearwood.info> wrote:
Do any other languages already have this feature?

Can you show some actual real-life code that would benefit from this, as
opposed to pretend code like:

    foo(bar=, qux=)

I think that if I had seen this syntax as a beginner, I would have had
absolutely no idea how to interpret it. I probably would have decided
that Python was an unreadably cryptic language and gone on to learn
something else.

Of course, with 20+ years of experience reading and writing code, I
know better now. I would interpret it as setting bar and qux to some
kind of Undefined value.

I am very sympathetic to the rationale:

"it is quite common to find code that forwards keyword parameters having
to re-state keyword arguments names"

and I've discussed similar/related issues myself, e.g. here:

https://mail.python.org/pipermail/python-list/2018-February/881615.html

But I am not convinced that adding magic syntax to implicitly guess the
value wanted as argument if it happens to match the parameter name is a
good design feature.

Is being explicit about the value that you are passing to a parameter
really such a burden that we need special syntax to avoid stating what
value we are using as the argument?

I don't think it is. And I would far prefer to read explicit code like
this:

    # Slightly modified from actual code.
    self.do_something(
        meta=meta,
        dunder=dunder,
        private=private,
        invert=invert,
        ignorecase=ignorecase,
        )

over the implicit version:

    # Looks like code I haven't finished writing :-(
    self.do_something(meta=, dunder=, private=, invert=, ignorecase=)


Out of the millions of possible values we might pass, I don't think that
the func(spam=spam) case is so special that we want to give it special
syntax.

--
Steven
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@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/VCCQ6BOVEQZ4ZWLKVDTVUCMAWD2VQL7B/
Code of Conduct: http://python.org/psf/codeofconduct/



--

CALVIN SPEALMAN

SENIOR QUALITY ENGINEER

cspealma@redhat.com  M: +1.336.210.5107

https://red.ht/sig
TRIED. TESTED. TRUSTED.