Sobes.tech
Senior

Ko izvadīs katrs print funkcijā ar maināmu noklusējuma argumentu?

sobes.tech AI

Atbilde no AI

Valodās, kur funkcijas var būt ar noklusējuma mutabliem (maināmiem) argumentiem, piemēram, Python, noklusējuma vērtības tiek inicializētas vienreiz funkcijas definēšanas laikā, nevis katru reizi izsaucot. Tas noved pie tā, ka, ja noklusējuma arguments ir maināms objekts (piemēram, saraksts vai vārdnīca), šīs izmaiņas šajā objektā saglabājas starp izsaukumiem.

Python piemērs:


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

func(1)  # Izvadīs: [1]
func(2)  # Izvadīs: [1, 2]
func(3, ['x'])  # Izvadīs: ['x', 3]
func(4)  # Izvadīs: [1, 2, 4]

Skaidrojums:

  • Pirmā izsaukuma func(1) laikā tiek izmantots noklusējuma saraksts [], kurā tiek pievienots 1.
  • Otrā izsaukuma func(2) laikā tiek izmantots tas pats saraksts, tagad [1], un tiek pievienots 2.
  • func(3, ['x']) izsaukumā tiek nodots jauns saraksts ['x'], tāpēc izmaiņas neietekmē noklusējuma sarakstu.
  • Pēdējā izsaukuma func(4) laikā atkal tiek izmantots noklusējuma saraksts, kas tagad satur [1, 2], un tiek pievienots 4.

Tādējādi katrs print parādīs aktuālo stāvokli maināmā noklusējuma argumenta, kas saglabā izmaiņas starp izsaukumiem.