code: def iter_files(root, exts=None, recursive=False):
      
  
      if exts is not None:
          exts = set((x.lower() for x in exts))
  
      def matches(e):
          return (exts is None) or (e in exts)
  
      if recursive is False:
          for entry in compat.scandir(root):
              if compat.has_scandir:
                  ext = splitext(entry.name)[-1].lstrip('.').lower()
                  if entry.is_file() and matches(ext):
                      yield entry.path
              else:
                  ext = splitext(entry)[-1].lstrip('.').lower()
                  if not compat.isdir(entry) and matches(ext):
                      yield join(root, entry)
      else:
          for root, folders, files in compat.walk(root):
              for f in files:
                  ext = splitext(f)[-1].lstrip('.').lower()
                  if matches(ext):
                      yield join(root, f)
docs: Iterate over file paths within root filtered by specified extensions.
      :param compat.string_types root: Root folder to start collecting files
      :param iterable exts: Restrict results to given file extensions
      :param bool recursive: Wether to walk the complete directory tree
      :rtype collections.Iterable[str]: absolute file paths with given extensions