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


Groups > comp.lang.python > #99574

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 14:33 +0100
Message-ID <mailman.138.1448544914.20593.python-list@python.org> (permalink)
References (1 earlier) <877fldnm9z.fsf@handshake.de> <mailman.73.1448459485.20593.python-list@python.org> <pan.2015.11.26.11.13.43.440000@nowhere.invalid> <mailman.132.1448538769.20593.python-list@python.org> <87k2p4ex5x.fsf@elektro.pacujo.net>

Show all headers | View raw


Op 26-11-15 om 13:56 schreef Marko Rauhamaa:
> Antoon Pardon <antoon.pardon@rece.vub.ac.be>:
>
>> Personnaly I would prefer:
>>
>>>>> q = [(lambda i: lambda x: i * x)(i) for i in range(4)]
>>>>> q[0](1), q[3](1)
>> (0, 3)
>>
>> And this is where I ask whether it would be worth the effort to change
>> the behaviour of python.
> Don't go there.
>
> Consider:
>
>     q = []
>     n = 0
>     x = "hello"
>
>     for i in range(4):
>         def stepper():
>             global n
>             n += 1
>             return i * x
>         q.append(stepper)
>
>     print(n)
>     print(q[1]())
>     print(n)
>     x = "there"
>     print(q[3]())
>     print(n)
>
> which prints:
>
>     0
>     hellohellohello
>     1
>     theretherethere
>     2
>
> after your change, you'd get:
>
>     0
>     hello
>     0
>     hellohellohello
>     0

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. I can of course
put the stepper function out of the for loop and then
convert the for loop into a list comprehension.

The results in that case is that my proposed change wouldn't
effect the results in python2 and that the code wouldn't run
in python3.

So could you clarify what list comprehension you are talking
about, that you think would cause trouble, should my proposal
be adopted.
-- 
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