code: def repeatfunc(func, times=None, *args):
      
      if times is None:
          return starmap(func, repeat(args))
      return starmap(func, repeat(args, times))
docs: Call *func* with *args* repeatedly, returning an iterable over the
      results.
  
      If *times* is specified, the iterable will terminate after that many
      repetitions:
  
          >>> from operator import add
          >>> times = 4
          >>> args = 3, 5
          >>> list(repeatfunc(add, times, *args))
          [8, 8, 8, 8]
  
      If *times* is ``None`` the iterable will not terminate:
  
          >>> from random import randrange
          >>> times = None
          >>> args = 1, 11
          >>> take(6, repeatfunc(randrange, times, *args))  # doctest:+SKIP
          [2, 4, 8, 1, 8, 4]