Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Marko Rauhamaa Newsgroups: comp.lang.python Subject: Re: What does a list comprehension do Date: Thu, 26 Nov 2015 17:36:33 +0200 Organization: A noiseless patient Spider Lines: 50 Message-ID: <87k2p43h8e.fsf@elektro.pacujo.net> References: <877fldnm9z.fsf@handshake.de> <87k2p4ex5x.fsf@elektro.pacujo.net> <87fuzseuee.fsf@elektro.pacujo.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="b7cb1518d23ec19d482dcc9c31d30fdd"; logging-data="8252"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18PTXmvW+e6cCqgrIuoClIF" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:9wS/oUzmxgH+i/I+M6m6oyJnWnc= sha1:uVQYnyzGtZ8xLEJx+hSmOHIK/6c= Xref: csiph.com comp.lang.python:99583 Antoon Pardon : > [ for in ] > > would implicitly be rewritten as follows: > > [ (lambda : )() for in ] Funny enough, that's how "list comprehensions" are created in Scheme: (map (lambda (i) (lambda (x) (* i x))) '(0 1 2 3)))) > There would no change on how lambdas work or functions or closures. First of all, it's weird to spend any effort in trying to alter a very special case. I don't recall having to generate a list of such functions. In fact, I barely ever use lambda in Python; explicit def statements are much more pleasing to the eye and are not restricted to simple expressions. Secondly, you'd lose the nice symmetry between for statements and comprehensions/generators. For example: ( lambda x: i * x for i in range(4) ) corresponds to: for i in range(4): yield lambda x: i * x Would you embed an extra lambda there, too? How about: i = 0 while i < 4: yield lambda x: i * x i += 1 or: for i in range(4): def f(x): return i * x yield f Marko