
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/VCCQ6B... Code of Conduct: http://python.org/psf/codeofconduct/
-- CALVIN SPEALMAN SENIOR QUALITY ENGINEER cspealma@redhat.com M: +1.336.210.5107 [image: https://red.ht/sig] <https://red.ht/sig> TRIED. TESTED. TRUSTED. <https://redhat.com/trusted>