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.
ich habe ein Frage zum Python-Namensraum (und hoffe, dass ich keinen Thread dazu übersehen habe - wäre ein schlechter Einstieg ins Forum). Folgendes kleines Programm:
Warum? Die Funktion hat den Parameter a, der defaultmäßig leer ist und sie wird zwei Mal ohne Parameter aufgerufen. Warum bekomme ich dann beim zweiten Aufruf kein leeres Dictionary ausgegeben?
def foo(a = None):
if a == None:
a = {}
print a
a.update({1:2})
Statt None kannst Du auch einen beliebigen konstanten Wert nehmen, aber eben nie ein veränderbares Objekt. Da ein Dictionary ein solches veränderbares Objekt ist, wird es genau einmal erzeugt und dann bei jedem Aufruf mit Standardparameter verwendet.
BlackJack hat geschrieben:Nicht beim ersten Aufruf, sondern wenn das ``def`` ausgeführt wird.
Mist, da war noch was... aber mal eine Gegenfrage: Wie ist das bei vorkomplierten Dateien (.pyc). Wird das def mit der Auswertung der Default-Parameter da bereits bei der Kompilierung oder erst beim Start ausgeführt?
Erst beim Start, also wieder wenn ``def`` ausgeführt wird. Das wäre sonst auch etwas inkonsistent, wenn sich der pyc-Code anders verhalten würde als der Quelltext aus dem der Bytecode generiert wurde. Zum Beispiel: