How to do this in Python...

Cliff Wells clifford.wells at attbi.com
Tue Jan 28 13:32:00 EST 2003


On Tue, 2003-01-28 at 02:00, Alex Martelli wrote:
> Cliff Wells wrote:
>    ...
> > Well, if conciseness is the goal, I'm shocked that no one has suggested
> > the obvious and practically idiomatic:
> > 
> > if filter(None, [match for match in [re.search(pattern1, target)]]):
> >     print "1", match.string
> > elif filter(None, [match for match in [re.search(pattern2, target)]]):
> >     print "2", match.string
> > else:
> >     print "no match"
> 
> Weird to use filter AND list comprehension when just the latter
> would suffice,,,:
> 
> if [match for match in [re.search(pattern1,target)] if match]:


Yes, but I considered that ugly and unreadable <wink>.


> etc.  The if clause in the list comprehension is useful here.
> 
> 
> Personally, I consider this idiom a (slight) _abuse_ of list
> comprehensions -- specifically, of the "implementation detail"
> that any identifier that gets bound in the for clause of a
> list comprehension gets bound in the SURROUNDING scope, i.e.,
> a list comprehension does not define a new nested scope.
> 
> I guess that, if the idiom becomes a popular replacement for
> the missing assign-and-test, all future releases of Python
> will be practically constrained to let list comprehensions
> always "pollute" the surrounding scope in this way.  But this
> does not strike me, personally, as a very nice prospect anyway.

Fortunately it turned out to be a horrible joke ;)  I guess after
looking at DSV you must think all my code looks like that =)


-- 
Cliff Wells <clifford.wells at attbi.com>






More information about the Python-list mailing list