[Python-ideas] YAML (yet-another-multiline-lambda)
Antony Lee
anntzer.lee at gmail.com
Tue Oct 22 21:00:16 CEST 2013
On Tuesday, October 22, 2013 5:39:03 AM UTC-7, Steven D'Aprano wrote:
>
> On Tue, Oct 22, 2013 at 03:10:29AM -0700, Antony Lee wrote:
>
> > Specifically, I suggest that the "def" (and possibly the "class")
> > keyword(s) may be used in an expression context, if immediately
> surrounded
> > by parentheses.
>
> I don't think there is any need to allow class in an expression, since
> we already have type().
>
I don't actually think that extending the "class" statement is that useful,
but felt that given the similarity between class and def, I may as well
mention it. The main point here is really the "def" statement.
>
> > The indentation of the body of the function is given by
> > the indentation of the first line after the def.
>
> I presume that means you can't do this:
>
> value = [1, 2, 3, (def spam(arg): do_this()
> do_that()
> ), 4, 5, 6]
>
> I think I would be okay with that, since you can't do that with the def
> statement either:
>
> py> def spam(): do_this()
> ... do_that()
> File "<stdin>", line 2
> do_that()
> ^
> IndentationError: unexpected indent
>
Yes, that is the intent.
>
>
> I suppose, like the statement version, a single-line function body could
> be inline:
>
> value = [1, 2, 3, (def spam(arg): do_this()), 4, 5, 6]
>
> which would then make lambda redundant.
>
While TOOWTDI, I think it is somewhat agreed that lambda's syntax is a bit
a kludge, so perhaps we should try to find a replacement.
>
> In each of your examples, you have the body indented further to the
> right than the def. Is that mandatory, or would you allow something like
> this?
>
> value = [1, 2, 3, (def spam(arg):
> do_this()
> do_that()
> if condition():
> do_something_else()
> ),
> 4, 5, 6,
> ]
>
> That is, relative to the def itself, the body is outdented.
>
I would allow this on grounds of grammar simplicity (but perhaps strongly
discourage it in a style guide).
>
>
> I can't see any reason to justify prohibiting the above in the language,
> although I'd probably frown upon it in style-guides. I think that should
> be written as:
>
> value = [1, 2, 3,
> (def spam(arg):
> do_this()
> do_that()
> if condition():
> do_something_else()
> ),
> 4, 5, 6,
> ]
>
> sort of thing. But I don't think that having the first indent be to the
> left of the def should be prohibited. However, that can lead to some
> pretty ugly, and misleading, constructions:
>
> def spam(arg, func=(def ham(a,
> x,
> y,
> z):
> fe(a)
> fi(x)
> fo(y)
> fum(z)
> ),
> ):
> ...
>
>
> I'm not sure if there is a question buried in this, or just an
> observation. I hardly ever miss having multi-line lambdas, and I fear
> that they will make code harder to read and understand.
>
>
> --
> Steven
> _______________________________________________
> Python-ideas mailing list
> Python... at python.org <javascript:>
> https://mail.python.org/mailman/listinfo/python-ideas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20131022/8271f775/attachment.html>
More information about the Python-ideas
mailing list