lint warnings

Gerald Britton gerald.britton at gmail.com
Tue Feb 15 09:03:45 EST 2011


I find:

    map(func, iterable)

to be "neater" than:

    [func(item) for item in iterable]

If nothing else, the "map" version is shorter.  More importantly, in
the 2.x series (which I am often limited to for compatibility
reasons), the variable used in the list comprehension leaks to the
following code:

$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> del item
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'item' is not defined
>>> [int(item) for item in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> item
9
>>>

which can cause hard-to-find bugs.  Fortunately this has been corrected in 3.x.

Also, as already shown, the map version is faster. BTW, if you like:

    [item for item in iterable if predicate(item)]

you can use:

    filter(predicate, item)

I find the latter neater for the same reasons as above

-- 
Gerald Britton



More information about the Python-list mailing list