[Tutor] a quick Q: what does the "collapse" mean?

Peter Otten __peter__ at web.de
Thu Sep 8 17:51:58 CEST 2011


Steven D'Aprano wrote:

> lina wrote:
> 
>> one example:
>> 
>> def info(object, spacing=10, collapse=1):
>>     """Print methods and docs strings.
>> 
>>     Take modules, class, list, dictionary, or strong."""
>>     methodList = [e for e in dir(object) if callable(getattr(object, e))]
>>     processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda
>>     s: s) print "\n".join(["%s %s" %
>>                     (method.ljust(spacing),
>>                     processFunc(str(getattr(object, method).__doc__)))
>>                     for method in methodList])
> 
> 
> In this example, "collapse" is used as the name of an argument which
> takes a true/false flag. If collapse is true, runs of whitespace is
> collapsed into a single space:
> 
> "hello         world" => "hello world"
> 
> The above function would be much easier to understand if it was written
> like this:
> 
> def info(object, spacing=10, collapse=1):
>      """Print methods and docs strings.
> 
>      Take modules, class, list, dictionary, or string.
>      """
>      method_names = []
>      doc_strings = []
>      for name in dir(object):
>          attribute = getattr(object, name)
>          if callable(attribute):
>              method_names.append(name.ljust(spacing))
>              doc_strings.append(str(attribute.__doc__))
>      if collapse:
>          doc_strings = [" ".join(doc.split()) for doc in doc_strings]
>      parts = ["%s %s" % (n, d) for n,d in zip(method_names, doc_strings)]
>      print "\n".join(parts)
> 
> 
> 
> Much longer, but easier to follow for a beginner.

Or even

def info(object, spacing=10, collapse=True):
     for name in dir(object):
         attribute = getattr(object, name)
         if callable(attribute):
             doc = str(attribute.__doc__)
             if collapse:
                 doc = " ".join(doc.split())
             print name.ljust(spacing), doc




More information about the Tutor mailing list