Yes, it' still a generator. The return is (almost) equivalent to raising StopIteration.
PEP 255 spells it out:
Specification: Return
A generator function can also contain return statements of the form:
"return"
Note that an expression_list is not allowed on return statements in
  the body of a generator (although, of course, they may appear in the
  bodies of non-generator functions nested within the generator).
When a return statement is encountered, control proceeds as in any
  function return, executing the appropriate finally clauses (if any
  exist).  Then a StopIteration exception is raised, signalling that the
  iterator is exhausted.   A StopIteration exception is also raised if
  control flows off the end of the generator without an explict return.
Note that return means "I'm done, and have nothing interesting to
  return", for both generator functions and non-generator functions.
Note that return isn't always equivalent to raising StopIteration: 
  the difference lies in how enclosing try/except constructs are
  treated. For example,
>>> def f1():
...     try:
...         return
...     except:
...        yield 1
>>> print list(f1())
[]
because, as in any function, return simply exits, but
>>> def f2():
...     try:
...         raise StopIteration
...     except:
...         yield 42
>>> print list(f2())
[42]
because StopIteration is captured by a bare "except", as is any
  exception.