Źródło: Arkusze CKE
Jaki będzie wynik działania poniższego kodu w języku Python?
def fun(x, l=[]):
l.append(x)
return l
print(fun(1))
print(fun(2))
print(fun(3, []))
print(fun(4))
Warianty odpowiedzi
-
A
[1], [2], [3], [4, 3]
-
B
[1], [1, 2], [3], [1, 2, 4]
-
C
[1], [1, 2], [3], [3, 4]
-
D
[1], [2], [3], [4]
Wyjaśnienie
To klasyczna pułapka w Pythonie związana z domyślnymi argumentami funkcji.
W Pythonie domyślna wartość argumentu l=[] jest tworzona tylko raz, w momencie definiowania funkcji. Ta sama lista jest potem modyfikowana przy kolejnych wywołaniach, jeśli nie podamy własnego argumentu.
Pierwsze i drugie wywołanie korzystają z tej samej domyślnej listy, dodając do niej odpowiednio 1 oraz 2.
Trzecie wywołanie dostaje nową, pustą listę przekazaną w argumencie, więc zwraca osobny wynik [3]. Czwarte wywołanie znów sięga do domyślnej listy, w której były już liczby 1 i 2, i dopisuje do niej 4, co daje [1, 2, 4].