Sobes.tech
Senior

Co wyświetli każdy print w funkcji z domyślnym argumentem mutowalnym?

sobes.tech AI

Odpowiedź od AI

W językach, w których funkcje mogą mieć domyślne argumenty mutowalne (zmienialne), takich jak Python, wartości domyślne są inicjowane raz podczas definiowania funkcji, a nie przy każdym wywołaniu. To oznacza, że jeśli argument domyślny jest obiektem mutowalnym (np. lista lub słownik), zmiany tego obiektu pozostają między wywołaniami.

Przykład w Pythonie:


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

func(1)  # Wypisze: [1]
func(2)  # Wypisze: [1, 2]
func(3, ['x'])  # Wypisze: ['x', 3]
func(4)  # Wypisze: [1, 2, 4]

Wyjaśnienie:

  • Przy pierwszym wywołaniu func(1) używana jest domyślna lista [], do której dodawane jest 1.
  • Przy drugim wywołaniu func(2) używana jest ta sama lista, teraz [1], i dodawane jest 2.
  • Przy wywołaniu func(3, ['x']) przekazywana jest nowa lista ['x'], więc zmiany nie wpływają na domyślną.
  • Przy ostatnim wywołaniu func(4) ponownie używana jest domyślna lista, która teraz zawiera [1, 2], i dodawane jest 4.

W ten sposób każde wywołanie print wyświetli aktualny stan zmiennego argumentu domyślnego, który zachowuje zmiany między wywołaniami.