Sobes.tech
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 ще покаже текущото състояние на променяемия аргумент по подразбиране, който запазва промените между извикванията.