<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 8, 2019 at 8:57 AM Samuel Li <<a href="mailto:samuel.wgx@gmail.com">samuel.wgx@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);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></blockquote><div><br></div><div>Do note you get the same results with `map(str.upper, ['a', 'b', 'c'])`.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><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></blockquote><div><br></div><div>Sorry, I'm personally not a fan as it looks like you have a typo in your code, e.g. you left of 'x' or something before the dot.<br></div></div></div>