Будет выведено abababab. Внутренний вызов f('ab') даёт 'abab', а внешний ещё раз удваивает полученную строку.
Вложенный вызов f: двукратное удвоение строки ab
Будет выведено abababab. Внутренний вызов f('ab') даёт 'abab', а внешний ещё раз удваивает полученную строку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что будет выведено в терминал в результате выполнения следующего кода?
def f(s): return s + s print(f(f('ab')))
Ответ
Будет выведено abababab. Внутренний вызов f('ab') даёт 'abab', а внешний ещё раз удваивает полученную строку.
Функция возвращает конкатенацию аргумента с самим собой. Сначала Python вычисляет аргумент внешнего вызова — результат внутреннего f. Затем выполняется второй вызов и только после этого print. Начальные две буквы превращаются в четыре, затем в восемь. Здесь нет рекурсии: функция f не вызывает себя в собственном теле, просто один вызов передан аргументом другому.