docs: def _getlist(self, key=None, useframes=True, validate=True):
          """Return specified pages as list of TiffPages or TiffFrames.
  
          The first item is a TiffPage, and is used as a keyframe for
          following TiffFrames.
  
          """
          getitem = self._getitem
          _useframes = self.useframes
  
          if key is None:
              key = iter(range(len(self)))
          elif isinstance(key, Iterable):
              key = iter(key)
          elif isinstance(key, slice):
              start, stop, _ = key.indices(2**31-1)
              if not self._indexed and max(stop, start) > len(self.pages):
                  self._seek(-1)
              key = iter(range(*key.indices(len(self.pages))))
          elif isinstance(key, inttypes):
              # return single TiffPage
              self.useframes = False
              if key == 0:
                  return [self.pages[key]]
              try:
                  return [getitem(key)]
              finally:
                  self.useframes = _useframes
          else:
              raise TypeError('key must be an integer, slice, or iterable')
  
          # use first page as keyframe
          keyframe = self._keyframe
          self.keyframe = next(key)
          if validate:
              validate = self._keyframe.hash
          if useframes:
              self.useframes = True
          try:
              pages = [getitem(i, validate) for i in key]
              pages.insert(0, self._keyframe)
          finally:
              # restore state
              self._keyframe = keyframe
              if useframes:
                  self.useframes = _useframes
  
          return pages