code: def first(iterable, default=_marker):
      
      try:
          return next(iter(iterable))
      except StopIteration:
          # I'm on the edge about raising ValueError instead of StopIteration. At
          # the moment, ValueError wins, because the caller could conceivably
          # want to do something different with flow control when I raise the
          # exception, and it's weird to explicitly catch StopIteration.
          if default is _marker:
              raise ValueError('first() was called on an empty iterable, and no '
                               'default value was provided.')
          return default
docs: Return the first item of *iterable*, or *default* if *iterable* is
      empty.
  
          >>> first([0, 1, 2, 3])
          0
          >>> first([], 'some default')
          'some default'
  
      If *default* is not provided and there are no items in the iterable,
      raise ``ValueError``.
  
      :func:`first` is useful when you have a generator of expensive-to-retrieve
      values and want any arbitrary one. It is marginally shorter than
      ``next(iter(iterable), default)``.