Duncan Booth <[EMAIL PROTECTED]> wrote in 
news:[EMAIL PROTECTED]:

> Diez B. Roggisch wrote:
> 
>>> No, the list comprehension lets you write an expression directly
>>> avoiding a function call, and it also allows you to add in a
>>> condition which can be used to filer the sequence. Your proposal 
adds
>>> nothing. 
>> 
>> It does. Consider this:
>> 
>> whatever = [x for x in xrange(1000000000) while  x < 10]
>> 
>> 
>> That would run only in a splitsecond of what the whole listcomp 
would.
> 
> Except that the comparable listcomp today is:
> 
> whatever = [x for x in takewhile(lambda x: x < 10, xrange
(1000000000))]
> 
> which also runs in a split second.
> 
> Actually, the OP was correct, it does add something: it removes the 
need 
> for a function or lambda in the takewhile just as the original 
listcomp 
> removes a function or lambda compared with the map version.
> 

Consider how it would be if the situation were reversed, and
whatever = [x for x in xrange(1000000000) while  x < 10] was the 
convention today. What advantage would there be to replacing it with 
whatever = [x for x in takewhile(lambda x: x < 10, xrange(1000000000))]?

As a newcomer to Python, I'd find the first syntax far more readily 
graspable, and I'd have to wonder why I'd ever need takewhile and lambda 
just to do what appears to be straightforward conditioning of a loop. 

I'm not a newcomer to Python, and I wonder about that anyway. 

I also note this, using Python 2.4.2 on win32:
>>> whatever = [x for x in takewhile(lambda x: x < 10, xrange
(1000000000))]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'takewhile' is not defined

So in addition to the two functions, I need an import statement. It 
looks like the argument can certainly be made that simplifying the 
syntax and lightening the call load bring some advantage to the table. 
There are other arguments to be made against the proposed syntax, I'm 
sure.

-- 
rzed

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to