Дана функция def add_item(item, items=[]): items.append(item); return items. Что вернёт второй вызов, если выполнить add_item("a"), а затем add_item("b")?
A
['a', 'b']: значение по умолчанию переиспользуется, и оба элемента остаются в одном спискеB
['b']: остаётся только последний элемент, при втором вызове список создаётся зановоC
['a']: остаётся только первый элемент, второй вызов получает свежую копию пустого спискаD
[]: пустой список, параметр сбрасывается между вызовами и каждый раз приходит чистымПравильный ответ. Изменяемое значение по умолчанию создаётся один раз при определении функции и переиспользуется между вызовами.
Разбор
Значение по умолчанию для items (пустой список) создаётся в момент определения функции, а не при каждом вызове. Поэтому первый вызов add_item("a") добавляет "a" в этот список, а второй add_item("b") добавляет "b" в тот же список и возвращает ["a", "b"]. Это частая ловушка — чтобы её избежать, пишут def add_item(item, items=None): if items is None: items = []. Тогда новый список создаётся при каждом вызове.
Проверь себя · 1/3разбор после ответа
Дана функция
def f(a, b, c): return a * 100 + b * 10 + c. Что вернёт вызов f(1, c=3, b=2)?Ещё вопросы по теме «Функции и аргументы»
- Есть функция `def add(x, y): return x + y`. Что вернет вызов `add(2, 3)`?
- Дана функция `def f(a, b, c): return a * 100 + b * 10 + c`. Что вернёт вызов `f(1, c=3, b=2)`?
- Есть функция `def power(x, exp=2): return x ** exp`. Что вернёт вызов `power(3)`?
- Дана функция `def total(*args): return sum(args)`. Что вернёт вызов `total(1, 2, 3)`?
- Дан код: `x = 10` на верхнем уровне модуля и `def inc(): return x + 1`. Что вернёт вызов `inc()`?
- Все вопросы по «Функции и аргументы» →