code: def walk(self, fn):
          
          if not hasattr(fn, "__call__"):
              raise TypeError("""walk_dataset requires a
                  function as its parameter""")
  
          dataset = self._dataset
          iterator = dataset.GetDES().begin()
          while (not iterator.equal(dataset.GetDES().end())):
              data_element = iterator.next()
              yield fn(data_element)
  
          header = self._header
          iterator = header.GetDES().begin()
          while (not iterator.equal(header.GetDES().end())):
              data_element = iterator.next()
              yield fn(data_element)
docs: Loops through all data elements and allows a function to interact
          with each data element.  Uses a generator to improve iteration.
  
          :param fn: Function that interacts with each DICOM element