Standardparameter abhängig von anderen Parametern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Actimehl
User
Beiträge: 6
Registriert: Donnerstag 7. September 2006, 14:37

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
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]
Antworten