Dlaczego używanie None naprawia zmienny domyślny argument Pythona?
Jestem w trakcie nauki Pythona, z którym mam do czynieniaProblem z argumentem Mutable Default.
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
Rozumiem, żea_list
jest inicjowany tylko wtedy, gdydef
po raz pierwszy napotkano instrukcję i dlatego kolejne wywołaniabad_append
użyj tego samego obiektu listy.
Nie rozumiem, dlaczegogood_append
działa inaczej. To wygląda jaka_list
bynadal być inicjowane tylko raz; Dlatego teżif
stwierdzenie byłoby prawdziwe tylko przy pierwszym wywołaniu funkcji, czylia_list
zostanie zresetowany tylko do[]
przy pierwszej inwokacji, co oznacza, że nadal będzie gromadzić całą przeszłośćnew_item
wartości i nadal być buggy.
Dlaczego tak nie jest? Jakiego pojęcia brakuje? Jaka_list
za każdym razem staraj się go wyczyścićgood_append
biegnie?