Seite 1 von 1

Standardparameter abhängig von anderen Parametern

Verfasst: Donnerstag 7. September 2006, 15:05
von Actimehl

Code: Alles auswählen

def palidrom_rek(wort, anf=0, ende=len(wort)-1):
  if anf >= ende: return True
  if wort[anf] == wort[ende]:
    return palidrom_rek(wort, anf+1, ende-1)
  else:
    return False

print palidrom_rek("HabbsbbaH")
Ich möchte einer Funktion einen Standartparameter geben der von einem anderen Parameter der Funktion anhängt. Ist so etwas
möglich? Der obige Code funktioniert jedenfalls so nicht

Gruß Actimehl

Verfasst: Donnerstag 7. September 2006, 16:01
von BlackJack
Das ist nicht direkt möglich weil die Vorgaben nur einmal berechnet werden und zwar wenn das ``def`` ausgeführt wird und nicht jedesmal beim Aufruf.

Üblicherweise nimmt man für solche Fälle einen Platzhalter und testet auf den in der Funktion:

Code: Alles auswählen

def palidrom_rekursiv(wort, anfang=0, ende=None):
    if ende is None:
        ende = len(wort) - 1
    if anfang >= ende:
        return True
    if wort[anfang] == wort[ende]:
        return palidrom_rekursiv(wort, anfang + 1, ende - 1)
    else:
        return False
Diese rekursive Funktion ist aber nicht so gut was die Laufzeit und den Speicherverbrauch angeht. Ausserdem ist bei CPython die Rekursionstiefe künstlich beschränkt.

Eine nicht-rekursive Lösung könnte zum Beispiel so aussehen:

Code: Alles auswählen

def is_palindrome(sequence):
    length = len(sequence)
    midpoint = length // 2
    correction = (length & 1) - 1
    return sequence[:midpoint] == sequence[-1:midpoint+correction:-1]