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 lisatakse1. - Teise kutsungi
func(2)ajal kasutatakse sama nimekirja, nüüd[1], ja sellele lisatakse2. 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 lisatakse4.
Seega näitab iga print käsk kehtivat olekut muutuvast vaikimisi argumendist, mis säilitab muudatused kutsed vahel.