def foo1(x=[]):
x.append(1)
print(x)
def foo2():
x = []
x.append(1)
print(x)
Почему при неоднократном вызове функции foo1() (без аргументов) получается вывод:
[1]
[1, 1]
[1, 1, 1]
...
Ответ
Разница в том, что первая функция может принимать 1 агрумент, вторая не принимает аргументов. Советую прочитать краткую информацию о функциях в Python.
Поведение, о котором Вы спрашиваете, происходит по такой причине, что значение по-умолчанию (пустой список) вычисляется единожды, когда функция была скомпилирована, затем оно используется при каждом вызове функции. Чтобы избежать такого поведения и получать пустой список при каждом вызове, измените код следующим образом:
def foo1(x=None):
if x is None:
x = []
x.append(1)
print(x)
Комментариев нет:
Отправить комментарий