<div dir="ltr">I'm trying to dig up past threads about alternatives to lambda because I would be astonished if "def" hadn't been considered and rejected for some reason. What I've found so far is <a href="https://mail.python.org/pipermail/python-dev/2006-February/060415.html">this unreassuring  post from Guido back in 2006</a><br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 21, 2018 at 4:27 PM, Jonathan Fine <span dir="ltr"><<a href="mailto:jfine2358@gmail.com" target="_blank">jfine2358@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Here's what I call a simple proposal. Some people might find it<br>
outrageous. Today is not 1st April.<br>
<br>
<br>
BACKGROUND<br>
============<br>
Many Python users don't like the name lambda. But many Python users<br>
don't want any change here. This is true because there are millions of<br>
Python users, and even 100 is many. And it's hard to introduce a new<br>
keyword, which might break existing code. (And perhaps even worse,<br>
break the community.)<br>
<br>
<a href="https://wiki.python.org/moin/LocalUserGroups" rel="noreferrer" target="_blank">https://wiki.python.org/moin/<wbr>LocalUserGroups</a><br>
> There about 1,637 Python user groups worldwide in almost 191 cities, 37 countries and over 860,333 members.<br>
<br>
<br>
SOME VALID PYTHON<br>
==================<br>
Here's some valid Python, defining two functions fn and gn, that are<br>
virtually identical.<br>
<br>
>>> def fn(a, b=2, c=3):<br>
...     return a ** b / c<br>
>>> fn<br>
<function fn at 0x7ff815dddf28><br>
<br>
>>> gn = lambda a, b=2, c=3: a ** b / c<br>
>>> gn<br>
<function <lambda> at 0x7ff815e2bbf8><br>
<br>
Notice that fn and gn have the same type, and differ by name.<br>
<br>
>>> type(fn), type(gn)<br>
(<class 'function'>, <class 'function'>)<br>
>>> fn.__qualname__, gn.__qualname__<br>
('fn', '<lambda>')<br>
<br>
And that we can modify the display name of fn and gn.<br>
<br>
>>> fn.__qualname__ = 'my_fn'<br>
>>> fn<br>
<function my_fn at 0x7ff815dddf28><br>
<br>
>>> gn.__qualname__ = 'my_gn'<br>
>>> gn<br>
<function my_gn at 0x7ff815e2bbf8><br>
<br>
<br>
MY SIMPLE PROPOSAL<br>
====================<br>
<br>
Here is my simple proposal. Enhance Python to allow<br>
<br>
>>> hn = def a, b=2, c=3: a ** b / c<br>
>>> hn<br>
<function at 0x7ff811e57620><br>
>>> hn.__qualname__<br>
''<br>
<br>
MIGRATION<br>
==========<br>
<br>
Migration of code would require only a keyword substitution of<br>
'lambda' by 'def'.<br>
<br>
And in the docs<br>
1. Note that 'def' can mean 'define' (the current use), and also<br>
'defer' (evaluation of an expression).<br>
2. In the first case, we have a *named function*. In the second case,<br>
we have an *expression function*.<br>
<br>
This idea came to me while writing:<br>
<a href="https://mail.python.org/pipermail/python-ideas/2018-August/052880.html" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>pipermail/python-ideas/2018-<wbr>August/052880.html</a><br>
<span class="HOEnZb"><font color="#888888"><br>
-- <br>
Jonathan<br>
______________________________<wbr>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/<wbr>codeofconduct/</a><br>
</font></span></blockquote></div><br></div>