[Tutor] A Python idiom that I don't get
Don Taylor
nospamformeSVP at gmail.com
Wed Apr 26 03:50:33 CEST 2006
I am trying to get some existing CPython 2.4 code working under Jython
(2.1) and I am puzzled by a line in the following function. It seems to
be a Python 2.4 idiom that is opaque to me.
The line is:
prefix = os.path.commonprefix(filter( bool, lines ))
and I don't understand what that 'bool' is doing. Or rather, I think
that I see what it is doing, but I am not sure - and I don't much like it.
filter is the built-in filter and it requires a callable returning a
bool as the first argument. It seems that 'bool' without arguments is a
callable that always evaluates to True (or at least non-zero) so this
'bool' always returns True. Is this really true (sic) by intention or
is it just an implemenation artifact?
I tried replacing 'bool' with 'True' but that won't work because True is
not callable.
I replaced 'bool' with 'lambda True: True' as in:
prefix = os.path.commonprefix(filter( lambda True: True, lines ))
and that does seem to work - and pass its unit tests.
Have I got this right and can I replace 'bool' with the lambda expression?
Or is there a clearer way to do this?
Thanks,
Don.
The full function is:
def find_common( lines ):
"""find and return a common prefix to all the passed lines.
Should not include trailing spaces
"""
if not lines: return ""
# get the common prefix of the non-blank lines. This isn't the most
# efficient way of doing this by _far_, but it _is_ the shortest
prefix = os.path.commonprefix(filter( bool, lines ))
if not prefix: return ""
# this regular expression will match an 'interesting' line prefix
matched = re.match("(\s*\w{1,4}>|\W+)", prefix)
if not matched: return ""
More information about the Tutor
mailing list