Страницы

Поиск по вопросам

вторник, 25 декабря 2018 г.

В чем отличие двух функций?

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)

Комментариев нет:

Отправить комментарий