Python: Default-Argumente von Funktionen



  • Hallo Community,

    ich spiele derzeit ein wenig mit Python rum und hab' ein Verständnisproblem bezüglich der Default-Argumente von Funktionen. Im offiziellen Tutorial von Python 3.3.4 hab' ich gelesen, dass Default-Argumente nur ein einziges Mal ausgewertet werden. Dies kann bei Anfängern ja schließlich zur Verwirrung führen:

    #! /usr/bin/python
    
    def f(x, y = []):
        y.append(x)
        return y
    
    print(f(1))
    print(f(1))
    

    Bildschirmausgabe:

    [1]
    [1, 1]
    

    Nun hab' ich zusätzlich im Tutorium gelesen, dass man diese "Tücke" halt folgendermaßen umgehen kann:

    #! /usr/bin/python
    
    def f(x, y = None):
    	if y == None:
    		y = []
    
    	y.append(x)
    	return y 
    
    print(f(1))
    print(f(1))
    

    Bildschirmausgabe:

    [1]
    [1]
    

    Zu meinem Verständnisproblem: Das Tutorium hat mir beigebracht, dass Default-Argumente nur ein einziges Mal ausgewertet werden. Wenn man nun im Code-Beispiel #2 die Funktion einmal aufruft, so müsste die Variable 'y' den Wert [1] haben. Beim zweiten Aufruf der Funktion trägt 'y' jedoch wieder den Wert 'None'. Also doch nicht nur ein einziges Mal ausgewertet(, oder)? Mir kommen die beiden Codebeispiele irgendwie widersprüchlich vor und suche Aufklärung.

    Mit freundlichen Grüßen,
    Fragelein



  • Theorie: der Teil [] bzw. None wird nur einmal ausgewertet. Die Zuweisung an y muss natürlich jedes mal neu gemacht werden, schließlich könntest Du für y auch einen anderen Wert übergeben.



  • Durch y=[] wird y umgebunden und zeigt danach auf eine leere Liste, nicht mehr auf das Default-Argument.



  • Verstanden.
    Danke.


Log in to reply