Como o 'rendimento' funciona neste gerador de permutação?

def perm_generator(lst):
    if len(lst) == 1:
        yield lst
    else:
        for i in range(len(lst)):
            for perm in perm_generator(lst[:i] + lst[i+1:]):
                yield [lst[i]] + perm

Esse código está me incomodando, pois não entendo como oyields se conectam. Meu entendimento era queyield age como umreturn, mas para temporariamente até que seja chamado novamente. Como estesyieldtrabalho?

questionAnswers(1)

yourAnswerToTheQuestion