Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #99593

Re: What does a list comprehension do

From Antoon Pardon <antoon.pardon@rece.vub.ac.be>
Newsgroups comp.lang.python
Subject Re: What does a list comprehension do
Date 2015-11-26 20:18 +0100
Message-ID <mailman.151.1448565531.20593.python-list@python.org> (permalink)
References (5 earlier) <87k2p4ex5x.fsf@elektro.pacujo.net> <mailman.138.1448544914.20593.python-list@python.org> <87fuzseuee.fsf@elektro.pacujo.net> <mailman.141.1448548095.20593.python-list@python.org> <87k2p43h8e.fsf@elektro.pacujo.net>

Show all headers | View raw


Op 26-11-15 om 16:36 schreef Marko Rauhamaa:
> Antoon Pardon <antoon.pardon@rece.vub.ac.be>:
> 
>>     [ <expression> for <var> in <iter> ]
>>
>> would implicitly be rewritten as follows:
>>
>>     [ (lambda <var>: <expression>)(<var>) for <var> in <iter>]
> 
> 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.

<shrug> Maybe it is small enough an effort but I wont loose any sleep over it
should the dev team have other priorities.

> 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?

No, not because that would be so troublesome in semantics
but because it would be annoying in python. Because in that
case you would embed a function (call) or introduce an
intermediate scope. Which would mean that if you want
to rebind a variable within the suite of the for loop
that is also used in other parts of the function/modules
you would have to declare that variable nonlocal/global at the
start of the suite. So it would be annoying plus that
it would be difficult to explain to people new to the
language.

Such an embedding would only be practical in a language where
you have to declare your variables.

-- 
Antoon.

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

What does a list comprehension do (was: Late-binding of function defaults (was Re: What is a function parameter =[] for?)) Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2015-11-25 14:51 +0100
  Re: What does a list comprehension do (was: Late-binding of function defaults (was Re: What is a function parameter =[] for?)) Nobody <nobody@nowhere.invalid> - 2015-11-26 11:13 +0000
    Re: What does a list comprehension do Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2015-11-26 12:52 +0100
      Re: What does a list comprehension do Marko Rauhamaa <marko@pacujo.net> - 2015-11-26 14:56 +0200
        Re: What does a list comprehension do Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2015-11-26 14:33 +0100
          Re: What does a list comprehension do Marko Rauhamaa <marko@pacujo.net> - 2015-11-26 15:56 +0200
            Re: What does a list comprehension do Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2015-11-26 15:26 +0100
              Re: What does a list comprehension do Marko Rauhamaa <marko@pacujo.net> - 2015-11-26 17:36 +0200
                Re: What does a list comprehension do Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2015-11-26 20:18 +0100
              Re: What does a list comprehension do Jussi Piitulainen <harvest@is.invalid> - 2015-11-26 18:11 +0200

csiph-web