I believe list comprehensions are difficult to read because they are not
formatted properly. For me, list comprehension clauses are an
expression, followed by clauses executed in the order. Any list
comprehension with more than one clause should be one-line-per clause.

Examples inline:

On 2018-02-15 19:57, Steven D'Aprano wrote:
> Where should the assignment go? [(y, y**2) let y = x+1 for x in (1, 2,
> 3, 4)] [(y, y**2) for x in (1, 2, 3, 4) let y = x+1] 

Since y is a function of x, it must follow the for clause:

> [
>     (y, y ** 2)
>     for x in (1, 2, 3, 4)
>     let y = x + 1
> ]

> How do they interact when you have multiple loops and if-clauses? [(w,
> w**2) for x in (1, 2, 3, 4) let y = x+1 for a in range(y) let z = a+1
> if z > 2 for b in range(z) let w = z+1] 

They are applied in order:

> [
>     (w, w**2)
>     for x in (1, 2, 3, 4)
>     let y = x+1
>     for a in range(y)
>     let z = a+1
>     if z > 2
>     for b in range(z)
>     let w = z+1
> ]

which is a short form for:

> def stuff():
>     for x in (1, 2, 3, 4):
>         y = x+1
>         for a in range(y):
>             z = a+1
>             if z > 2:
>                 for b in range(z):
>                     w = z+1
>                     yield (w, w**2)
>
> list(stuff())


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to