Antoon Pardon writes: > Op 26-11-15 om 14:56 schreef Marko Rauhamaa: >> Antoon Pardon wrote: >> >>> I don't understand. What I propose would be a minor change in how >>> list comprehension works. I don't see how your example can be turned >>> into a list comprehension. >> >> The list comprehension is only a special case of the interaction >> between closures and variables. If you dabble with list >> comprehensions and lambdas, you'll need to make consistent changes in >> closure semantics. > > It would only dabble with the list comprehension not with the lambda. > The effect of the change would only be that a list comprehension like > > [ <expression> for <var> in <iter> ] > > would implicitly be rewritten as follows: > > [ (lambda <var>: <expression>)(<var>) for <var> in <iter>] > > There would no change on how lambdas work or functions or closures. > >> BTW, all(!?) other languages from Java to Scheme share closure semantics >> with Python so you would really be making a mess by changing Python. > > Not this proposal, which wouldn't touch closure semantics.
It needs to take into account the possibility of more than one variable, but that's a minor adjustment. I like it. It's simple enough. The following code exercises different values from nested comprehension loops, together with a shared global whose value actually changes before each call to one of the listed thunks. m = "good morning to you" thoughts = [ (lambda n, u : ((lambda : (u//2)*m), (lambda : n))) (n, u) for n in range(10) if n % 2 # odd? for u in range(10) if u % 2 - 1 # less odd? if n < u ] for t, g in zip(thoughts, ((["hello"], ["eiku"], ["hej"]) + tuple(20 * "."))): m = g message, number = t print(number(), *message()) # Prints: 1 hello 1 eiku eiku 1 hej hej hej 1 . . . . 3 . . 3 . . . 3 . . . . 5 . . . 5 . . . . 7 . . . . -- https://mail.python.org/mailman/listinfo/python-list