<div dir="auto"><div>I'm really old ... I remember thinking how clever attrgetter() was when it was after to Python 2.4.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 8, 2019, 7:51 PM David Mertz <<a href="mailto:mertz@gnosis.cx">mertz@gnosis.cx</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">You could use the time machine: <a href="https://docs.python.org/3/library/operator.html" target="_blank" rel="noreferrer">https://docs.python.org/3/library/operator.html</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 8, 2019, 11:57 AM Samuel Li <<a href="mailto:samuel.wgx@gmail.com" target="_blank" rel="noreferrer">samuel.wgx@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><font face="monospace,monospace">Don't know if this has been suggested before. Instead of writing something like</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">>>> map(lambda x: x.upper(), ['a', 'b', 'c'])</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">I suggest this syntax:</font></div><div><font face="monospace,monospace">>>> map(.upper(), ['a', 'b', 'c'])</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">This would also work for attributes:</font></div><div><font face="monospace,monospace">>>> map(.real, [1j, 2, 3+4j])</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">Internally, this would require translating</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">.attribute -> lambda x: x.attribute</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">and<br></font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">.method(*args, **kwargs) -> lambda x: x.method(*args, **kwargs)</font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">This translation should only take place where a "normal" attribute lookup makes no sense (throws a SyntaxError); i.e. foo.bar works as before, foo(.bar) would previously throw a SyntaxError, so the new syntax applies and the .bar is interpreted as an attrgetter.<br></font></div><div><font face="monospace,monospace"><br></font></div><div><font face="monospace,monospace">This is of course only a cosmetic improvement over operator.attrgetter and operator.methodcaller, but I think it's nice enough to warrant consideration.<br><br></font></div><div><font face="monospace,monospace">If you like this idea or think it's utter garbage, feel free to discuss.<br></font></div></div>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" rel="noreferrer noreferrer" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer noreferrer noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div>
</blockquote></div></div></div>