Sobes.tech
Senior

Mida väljastab iga print funktsioonis, millel on muudetav vaikimisi argument?

sobes.tech AI

Vastus AI-lt

Keeltes, kus funktsioonidel võivad olla mutabile (muutuvad) vaikimisi argumendid, näiteks Pythonis, määratud väärtused initsialiseeritakse üks kord funktsiooni defineerimisel, mitte iga kutsumise ajal. See viib selleni, et kui vaikimisi argument on muutuv objekt (näiteks nimekiri või sõnastik), siis selle objekti muudatused säilivad vahemikus kutsed.

Näide Pythonis:


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

func(1)  # Väljund: [1]
func(2)  # Väljund: [1, 2]
func(3, ['x'])  # Väljund: ['x', 3]
func(4)  # Väljund: [1, 2, 4]

Selgitus:

  • Esimese kutsungi func(1) ajal kasutatakse vaikimisi nimekirja [], millele lisatakse 1.
  • Teise kutsungi func(2) ajal kasutatakse sama nimekirja, nüüd [1], ja sellele lisatakse 2.
  • func(3, ['x']) kutsungi ajal antakse uus nimekiri ['x'], seega muudatused ei mõjuta vaikimisi nimekirja.
  • Viimase kutsungi func(4) ajal kasutatakse uuesti vaikimisi nimekirja, mis nüüd sisaldab [1, 2], ja sellele lisatakse 4.

Seega näitab iga print käsk kehtivat olekut muutuvast vaikimisi argumendist, mis säilitab muudatused kutsed vahel.