Sobes.tech
Senior

Co vypíše každý print ve funkci s měnitelným výchozím argumentem?

sobes.tech AI

Odpověď od AI

V jazycích, kde funkce mohou mít výchozí mutabilní (měnitelné) argumenty, například v Pythonu, jsou výchozí hodnoty inicializovány pouze při definici funkce, nikoli při každém volání. To vede k tomu, že pokud je výchozí argument změnitelný objekt (například seznam nebo slovník), změny tohoto objektu přetrvávají mezi voláními.

Příklad v Pythonu:


def func(a, lst=[]):
    lst.append(a)
    print(lst)

func(1)  # Vypíše: [1]
func(2)  # Vypíše: [1, 2]
func(3, ['x'])  # Vypíše: ['x', 3]
func(4)  # Vypíše: [1, 2, 4]

Vysvětlení:

  • Při prvním volání func(1) se používá výchozí seznam [], do kterého se přidá 1.
  • Při druhém volání func(2) se používá stejný seznam, nyní [1], a přidá se 2.
  • Při volání func(3, ['x']) je předán nový seznam ['x'], takže změny neovlivňují výchozí.
  • Při posledním volání func(4) se znovu používá výchozí seznam, který nyní obsahuje [1, 2], a přidá se 4.

Tímto způsobem každé print zobrazí aktuální stav měnitelného výchozího argumentu, který si mezi voláními zachovává změny.