[Python-ideas] One more time... lambda function <--- from *** signature def.

Andrew Barnert abarnert at yahoo.com
Tue Mar 4 08:03:03 CET 2014


On Mar 3, 2014, at 22:02, David Townshend <aquavitae69 at gmail.com> wrote:
> What about a new code literal object, e.g.
> 
>     thunk = c'x + 3'
>     thunk(x=2)
> 
Why does it need to be built from/look like a string? I think it would be just as simple for the parser, and simpler for editors, and less misleading for readers, if it used a different marker.

Not that I'm seriously suggesting backticks here, but...

    thunk = `x + 3`

Most existing editors already treat that as an expression (since in 2.x it means repr(x + 3)). No human reader is going to be misled into thinking this means there's a way to create code objects from string objects without eval (c.f. all those questions on StackOverflow about how to make a raw string from a string...). And as far as the parser is concerned, it's trivial: '`' expr '`' is a Code whose value is whatever expr parses to.

Meanwhile, if this gives you a code object, what do you do with it? Using eval on something that looks like a string but isn't may be correct to anyone who understands Python deeply, but I think it could be very misleading to anyone else. And creating a FunctionType from a code object is pretty ugly for something that deserved literal support...
> Triple quotes could also be used to support multiline code blocks.
> 
That is one advantage of reusing strings. In fact, that gives us a way to embed statements in the middle of expressions. Which I'm not sure is a good thing.
> I'm not sure how positional arguments would be handled though, and scoping still needs to be thought through.
> 
If you have a code object, scoping is up to whoever evaluates it or builds a function out of it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140303/553d0281/attachment.html>


More information about the Python-ideas mailing list