lambda in list comprehension acting funny
rusi
rustompmody at gmail.com
Sat Jul 14 00:53:10 EDT 2012
On Jul 14, 8:43 am, Steven D'Aprano <steve
+comp.lang.pyt... at pearwood.info> wrote:
> On Fri, 13 Jul 2012 19:31:24 -0700, rusi wrote:
> > Consider the following
>
> > def foo(x):
> > i = 100
> > if x:
> > j = [i for i in range(10)]
> > return i
> > else:
> > return i
>
> A simpler example:
>
> def foo():
> i = 100
> j = [i for i in range(10)]
> return i
>
> In Python 3, foo() returns 100; in Python 2, it returns 9.
You did not get the point.
Converting my example to your format:
def foo_steven(n):
i = 100
j = [i for i in range(n)]
return i
$ python3
Python 3.2.3 (default, Jun 26 2012, 00:38:09)
[GCC 4.7.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo_steven(n):
... i = 100
... j = [i for i in range(n)]
... return i
...
>>> foo_steven(0)
100
>>> foo_steven(4)
100
>>>
$ python
Python 2.7.3rc2 (default, Apr 22 2012, 22:35:38)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo_steven(n):
... i = 100
... j = [i for i in range(n)]
... return i
...
>>> foo_steven(0)
100
>>> foo_steven(3)
2
>>>
Python 2:
When n>0 comprehension scope i is returned
When n=0 function scope i is returned
Python 3: The return statement is lexically outside the comprehension
and so that outside-scope's i is returned in all cases.
More information about the Python-list
mailing list