В чем отличие функций?
Почему b становится глобальной? Это же аргумент функции.
def f(a, b=[]):
b.append(a)
return b
print(f(1))
print(f(2))
print(f(3))
[1]
[1, 2]
[1, 2, 3]
def f(a):
b = []
b.append(a)
return b
print(f(1))
print(f(2))
print(f(3))
[1]
[2]
[3]
Ответы (1 шт):
Автор решения: qwardo
→ Ссылка
В первом примере функция f имеет дефолтный аргумент b, который изначально является пустым списком. Когда вы вызываете функцию f без указания значения для b, этот список сохраняется между вызовами функции, поскольку он является мутируемым объектом и используется в качестве значения по умолчанию. Поэтому изменения в b (например, добавление новых элементов) сохраняются между вызовами функции, и вы видите накопленные результаты. Второй пример не имеет дефолтного значения для b, и каждый раз, когда вызывается функция, создается новый список b.