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


Groups > comp.lang.python > #25168

Re: lambda in list comprehension acting funny

Path csiph.com!usenet.pasdenom.info!news.albasani.net!newsfeed.freenet.ag!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Return-Path <python-python-list@m.gmane.org>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.001
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'expressions': 0.07; 'parameter': 0.07; 'subject:skip:c 10': 0.07; 'python': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'references.': 0.09; 'stored': 0.10; "'at": 0.16; 'bind': 0.16; 'funcs': 0.16; 'helps.': 0.16; 'lambda': 0.16; 'message-id:@dough.gmane.org': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'simplest': 0.16; 'variable': 0.20; 'references': 0.23; 'this:': 0.23; 'header:In-Reply-To:1': 0.25; 'header:User- Agent:1': 0.26; 'header:X-Complaints-To:1': 0.28; 'subject:list': 0.28; 'print': 0.32; 'anyone': 0.33; 'to:addr:python-list': 0.33; 'received:org': 0.36; 'does': 0.37; 'subject:: ': 0.38; 'gives': 0.39; 'to:addr:python.org': 0.39; 'header:Received:5': 0.40; 'more': 0.63; 'importantly,': 0.65; 'received:93': 0.72; '(they': 0.84; 'received:hr': 0.84; 'why?': 0.84; 'subject:funny': 0.91
X-Injected-Via-Gmane http://gmane.org/
To python-list@python.org
From Jurko Gospodnetić <jurko.gospodnetic@pke.hr>
Subject Re: lambda in list comprehension acting funny
Date Wed, 11 Jul 2012 09:01:18 +0200
Organization PKE sistemi d.o.o.
References <CADjSo4QvTnGKy_ZYOO5qZu3tSKovwAMGjku4L+RXEkYmwXPz4g@mail.gmail.com> <CADjSo4SeuMJOP_iEM9rjVsFtVh84HaVUtPkUCZGKiEdQBWuerw@mail.gmail.com>
Mime-Version 1.0
Content-Type text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding 8bit
X-Gmane-NNTP-Posting-Host 93-139-12-146.adsl.net.t-com.hr
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1
In-Reply-To <CADjSo4SeuMJOP_iEM9rjVsFtVh84HaVUtPkUCZGKiEdQBWuerw@mail.gmail.com>
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.12
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <http://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <http://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.2008.1341990101.4697.python-list@python.org> (permalink)
Lines 30
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1341990101 news.xs4all.nl 6872 [2001:888:2000:d::a6]:40629
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:25168

Show key headers only | View raw


   Hi.

>> funcs = [ lambda x: x**i for i in range( 5 ) ]
>> print funcs[0]( 2 )
>>
>> This gives me
>> 16
>>
>> When I was excepting
>> 1
>>
>> Does anyone know why?

   Just the way Python lambda expressions bind their variable 
references. Inner 'i' references the outer scope's 'i' variable and not 
its value 'at the time the lambda got defined'.


> And more importantly, what's the simplest way to achieve the latter? :)

   Try giving the lambda a default parameter (they get calculated and 
have their value stored at the time the lambda is defined) like this:
   funcs = [ lambda x, i=i: x**i for i in range( 5 ) ]


   Hope this helps.

   Best regards,
     Jurko Gospodnetić

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


Thread

Re: lambda in list comprehension acting funny Jurko Gospodnetić <jurko.gospodnetic@pke.hr> - 2012-07-11 09:01 +0200

csiph-web