Konvertieren der "yield from" -Anweisung in Python 2.7-Code

Ich hatte einen Code unter Python 3.2 und wollte ihn unter Python 2.7 ausführen. Ich habe es konvertiert (habe den Code vonmissing_elements Ich bin mir aber nicht sicher, ob dies der effizienteste Weg ist. Grundsätzlich passiert was, wenn es zwei gibtyield from ruft wie unten in der oberen hälfte und in der unteren hälfte aufmissing_element Funktion? Werden die Einträge aus den beiden Hälften (obere und untere) in einer Liste aneinander angehängt, so dass die übergeordnete Rekursion mit der Funktionyield from rufen und beide Hälften zusammen benutzen?

def missing_elements(L, start, end):  # Python 3.2
    if end - start <= 1: 
        if L[end] - L[start] > 1:
            yield from range(L[start] + 1, L[end])
        return

index = start + (end - start) // 2

# is the lower half consecutive?
consecutive_low =  L[index] == L[start] + (index - start)
if not consecutive_low:
    yield from missing_elements(L, start, index)

# is the upper part consecutive?
consecutive_high =  L[index] == L[end] - (end - index)
if not consecutive_high:
    yield from missing_elements(L, index, end)

def main():
    L = [10, 11, 13, 14, 15, 16, 17, 18, 20]
    print(list(missing_elements(L, 0, len(L)-1)))
    L = range(10, 21)
    print(list(missing_elements(L, 0, len(L)-1)))

def missing_elements(L, start, end):  # Python 2.7
    return_list = []                
    if end - start <= 1: 
        if L[end] - L[start] > 1:
            return range(L[start] + 1, L[end])

    index = start + (end - start) // 2

    # is the lower half consecutive?
    consecutive_low =  L[index] == L[start] + (index - start)
    if not consecutive_low:
        return_list.append(missing_elements(L, start, index))

    # is the upper part consecutive?
    consecutive_high =  L[index] == L[end] - (end - index)
    if not consecutive_high:
        return_list.append(missing_elements(L, index, end))
    return return_list

Antworten auf die Frage(6)

Ihre Antwort auf die Frage