Что именно происходит, когда yield и return используются в одной и той же функции в Python, например?
def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += len(sub) # use start += 1 to find overlapping matches
Является ли он еще генератором?