docs: def remove_field_if(self, *args):
          """
          Remove a field from this record, if
          `fun(value)` evaluates to `True`.
  
          The real signature is like:
  
              remove_field_if(self, fieldspec, fun):
  
          but a variable number of fieldspecs can be added,
          so we have to resort to `*args` and figure out, which one is
          a function, by asking if the argument is `callable`.
  
          Example:
  
          Iterate over all 710.a fields and remove the
          field, if any subfield value startswith
          'Naxos Digital Services.'
  
          Returns a list of removed fields (or an empty list).
  
          >>> _ = record.remove_field_if('710.a',
              _startswith('Naxos Digital Services.'))
  
          If there are multiple fields with the same tag,
          only the fields that match are removed, e.g.:
  
          >>> record = Record()
          >>> record.add('020', a='97811111111')
          >>> record.add('020', a='11111111')
          >>> rmvd = record.remove_field_if('020.a', _startswith('978'))
          >>> print(rmvd)
          [<pymarc.field.Field object at 0x1e53910>]
  
          >>> print(record)
          =LDR            22        4500
          =020  \\$a11111111
  
          """
          fieldspecs = set()
          function = lambda val: False
          for arg in args:
              if callable(arg):
                  function = arg
              elif isinstance(arg, basestring):
                  fieldspecs.add(arg)
              else:
                  raise ValueError('argument must be callable (test function) '
                                   'or basestring (fieldspec, like 020 '
                                   'or 856.u, etc.)')
          removed = []
          for field, value in fieldgetter(*fieldspecs)(self):
              if function(value):
                  removed.append(field)
                  self.remove_field(field)
          return removed