code: def map(self, function):
          
          if isinstance(self.slice, slice):
              for i in range(*self.slice.indices(len(self.layout.fields))):
                  function(self.layout.fields[i])
  
          elif isinstance(self.slice, list):
              # A list of pointers  Ex: [[[0, 0], 'div'], [[0, 2, 3], 'field_name']]
              for pointer in self.slice:
                  position = pointer[0]
  
                  layout_object = self.layout.fields[position[0]]
                  for i in position[1:]:
                      previous_layout_object = layout_object
                      layout_object = layout_object.fields[i]
  
                  # If update_attrs is applied to a string, we call to its wrapping layout object
                  if (
                      function.__name__ == 'update_attrs'
                      and isinstance(layout_object, string_types)
                  ):
                      function(previous_layout_object)
                  else:
                      function(layout_object)
docs: Iterates over layout objects pointed in `self.slice` executing `function` on them
          It passes `function` last layout object