Bei dieser Frage geht es mehr um Neugier als um Nützlichkeit. Wenn ich eine Funktion schreibe, die ewig laufen soll, zum Beispiel einen Daemon, wie würde Python damit umgehen, wenn ich die Funktion am Ende der Funktion erneut aufrufen würde?
%Vor%Ich bin mir ziemlich sicher, dass dies in C zu einem Stack-Überlauf führen würde, aber angesichts der Abstraktionsebene von C zu Python rate ich anders behandelt.
Würde ich dafür in die Hölle gehen?
In fast allen Python-Interpretern, die einen Stack-Überlauf verursachen, wie in C. Die Funktion auf höherer Ebene, die dies zulässt, heißt Tail Call Optimization oder Tail Recursion Elimination und der wohlwollende Diktator von Python lehnt das Hinzufügen ab das zur Sprache .
Dieser Stil wird für Python als nicht-idiomatisch angesehen und eine einfache while True:
-Schleife wird bevorzugt.
Die maximale Rekursionstiefe kann mit sys.getrecursionlimit()
abgerufen und mit sys.setrecursionlimit()
.
Würde ich dafür in die Hölle gehen?
Ja. CPython hat keine Tail Recursion Elimination / Last Call Optimierung.
%Vor%Fehler:
%Vor% Die C-Version des Python-Interpreters (die Sie wahrscheinlich verwenden) wird einen Fehler verursachen, wenn Sie nie von daemonLoop
zurückkehren. Ich bin mir nicht sicher über andere Versionen.
Diese Art von Rekursion ist, was Lisp-Dialekte wie Scheme gemacht sind!
Tags und Links python c recursion infinite-loop function-calls