Senior
Какво ще изведе всеки print във функция с променлив по подразбиране аргумент?
sobes.tech AI
Отговор от AI
В езици, където функциите могат да имат по подразбиране мутабелни (променяеми) аргументи, например в Python, стойностите по подразбиране се инициализират веднъж при дефинирането на функцията, а не при всяко извикване. Това води до ситуация, при която ако аргументът по подразбиране е променяем обект (например списък или речник), промените в този обект остават между извикванията.
Пример в Python:
def func(a, lst=[]):
lst.append(a)
print(lst)
func(1) # Ще изведе: [1]
func(2) # Ще изведе: [1, 2]
func(3, ['x']) # Ще изведе: ['x', 3]
func(4) # Ще изведе: [1, 2, 4]
Обяснение:
- При първия извикване
func(1)се използва списъкът по подразбиране[], към който се добавя1. - При второто извикване
func(2)се използва същият списък, сега[1], и се добавя2. - При извикване
func(3, ['x'])се предава нов списък['x'], така че промените не засягат стойността по подразбиране. - При последното извикване
func(4)отново се използва списъкът по подразбиране, който сега съдържа[1, 2], и се добавя4.
По този начин, всяко print ще покаже текущото състояние на променяемия аргумент по подразбиране, който запазва промените между извикванията.