Весь фрагмент не запустится: третий вызов содержит позиционный аргумент после именованного и вызывает SyntaxError. После исправления проявится общий изменяемый список src по умолчанию.
Как работает функция add_element в приведённом фрагменте
Весь фрагмент не запустится: третий вызов содержит позиционный аргумент после именованного и вызывает SyntaxError. После исправления проявится общий изменяемый список src по умолчанию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какое действие выполняет следующий код:
def add_element(new: list[str], src: list = []) -> list:
if isinstance(new, list):
src.extend(new)
else:
src.append(new)
return src
if __name__ == "__main__":
value1 = add_element("test")
print(value1)
value2 = add_element(["test2", "test3"])
print(value2)
value3 = add_element(new=["test4"], value2)
print(value3)
Ответ
Весь фрагмент не запустится: третий вызов содержит позиционный аргумент после именованного и вызывает SyntaxError. После исправления проявится общий изменяемый список src по умолчанию.
Исправьте вызов на add_element(new=['test4'], src=value2). Тогда первые две печати дадут ['test'] и ['test', 'test2', 'test3'], а третья добавит 'test4' в тот же список. value1 и value2 будут ссылаться на него же.
Чтобы независимые вызовы не делили список, задайте src=None и создавайте [] внутри функции только при src is None. Переданный явно список можно по контракту менять. Аннотация new: list[str] противоречит вызову со строкой; укажите str | list[str], если поддерживаются оба варианта.