code: def get_param(self, keyword, param=None, default=None):
          
          if not keyword or keyword not in self.data:
              return [default]
          # keyword in data - if no value, we store None, so return that in a list
          if self.data[keyword] is None:
              return [None]
          # If we're not searching for a particular parameter, just return all
          # the values for this keyword.
          if not param:
              return self.data[keyword]
  
          found = []
          for line in self.data[keyword]:
              # Line has already had keyword removed.
              words = line.strip().split()
              if len(words) > 1:
                  # Line has param and value - check param:
                  if words[0] == param:
                      found.append(words[1])
              else:
                  found.append(words[0])
          if found == []:
              return [default]
          else:
              return found
docs: Get all the parameters for a given keyword, or default if keyword or
          parameter are not present in the configuration.
  
          This finds every declaration of the given parameter (which is the
          one which takes effect).  If no parameter is given, then the entire
          line is treated as the parameter.  There is always at least one
          element returned - the default, or
  
          Parameters:
              keyword(str): The keyword name, e.g. 'tinker' or 'driftfile'
              param(str): The parameter name, e.g. 'panic' or 'step'.  If not
                  given, all the definitions of that keyword are given.
              default(str): The default (singular) value if the keyword or
                  parameter is not found.  If not given, None is used.
  
          Returns:
              list: All the values of the given parameter, or an empty list if
              not found.