Вопросы по теме «Функции и аргументы»

Проверь себя · 1/3разбор после ответа
Дана функция def total(*args): return sum(args). Что вернёт вызов total(1, 2, 3)?

Позиционные и именованные аргументы, *args, **kwargs, значения по умолчанию, замыкания, lambda — всё это спрашивают на собеседованиях. Частая ловушка — мутабельный объект как значение по умолчанию. Умение декомпозировать код на функции и правильно работать с аргументами — признак зрелого разработчика.

Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 15 из 20

1Есть функция `def power(x, exp=2): return x ** exp`. Что вернёт вызов `power(3)`?
AЧисло `5` при трактовке одиночного аргумента как суммы `x + exp` равной `3 + 2`
BЧисло `27` при возведении значения по умолчанию `exp` в куб самой функцией
CЧисло `9` при подстановке значения по умолчанию `exp = 2` в выражение `3 ** 2`
DОшибка `TypeError`: функция требует обязательной передачи обоих аргументов
Ответ: Если аргумент со значением по умолчанию не передан, используется значение по умолчанию.

Параметр `exp=2` означает, что если `exp` не указан при вызове, он равен 2. Поэтому `power(3)` вычисляет `3 ** 2` и возвращает 9. Значения по умолчанию помогают делать вызов функции удобнее: чаще всего используемый сценарий получается короче. Ошибка `TypeError` возникла бы, только если бы у `exp` не было дефолта.

Подробный разбор →
2Есть функция `def f(x): print(x)`. Чему будет равна переменная `res` после кода `res = f(3)`?
AЗначение `None`: функция без `return` неявно возвращает `None` при любом теле
BЧисло `3`: значение из вызова `print(x)` становится результатом функции `f(3)`
CСтрока `'3'`: строковое представление, в которое `print` приводит число при выводе
D`TypeError`: исключение возникает при присваивании результата функции без `return`
Ответ: Если в функции нет `return`, результат вызова — `None`, даже если внутри что-то печатается.

Функция `f` вызывает `print(x)`, поэтому на экран выведется число 3. Но возвращаемого значения нет, и Python неявно возвращает `None`, поэтому `res = f(3)` присваивает `res` значение `None`. В аналитическом коде это важно: функции, результат которых нужен дальше, должны явно возвращать данные через `return`, а не только печатать. Никакого `TypeError` тут не будет — присваивание `None` совершенно валидно.

Подробный разбор →
3Есть функция `def add(x, y): return x + y`. Что вернет вызов `add(2, 3)`?
AЦелое число `5`, полученное сложением двух целых аргументов функции
BСтрока `'23'` от склейки строкового представления каждого аргумента подряд
CЗначение `None`: вызов `add(2, 3)` не возвращает результат при таком объявлении
D`TypeError`: аргументы передаются без явного приведения к нужному типу `int`
Ответ: `return` возвращает значение из функции; без `return` функция возвращает `None`.

Функция объявлена через `def`, а значение выражения после `return` становится результатом вызова. В примере `add(2, 3)` возвращается `5`, потому что складываются два целых числа. Это базовый паттерн: вычислить результат и явно отдать его наружу через `return`, чтобы дальше использовать в коде. Если бы там стояло `print(x + y)` без `return`, функция вернула бы `None`, как и любая функция без явного `return`.

Подробный разбор →
4Дана функция `def discount(total): if total >= 100: return 10; return 0`. Что вернет вызов `discount(120)`?
AЧисло `0`: значение возвращает второй `return`, расположенный после ветви условия
BЧисло `120`: функция отдаёт сам аргумент `total` без выполнения какой-либо ветки
CЧисло `10`: первый `return` сработал, поскольку условие `total >= 100` истинно
DЗначение `None`: функция отдаёт пустой результат, если ни один `return` не выполнился
Ответ: Первый сработавший `return` завершает выполнение функции и возвращает указанное значение.

В вызове `discount(120)` условие `total >= 100` истинно, поэтому выполняется `return 10` — функция сразу завершается этим значением. Второй `return 0` уже не выполняется и сработал бы только при `total < 100`. Значение 120 — это сам аргумент, его функция не возвращает. `None` функция отдаёт только в том случае, если ни один `return` не был выполнен.

Подробный разбор →
5Есть функция `def f(a, b, c): return a + b + c`. Какой вызов не выполнится из-за позиции аргументов (позиционный после именованного)?
A`f(1, 2, 3)`
B`f(1, b=2, 3)`
C`f(a=1, b=2, c=3)`
D`f(1, 2, c=3)`
Ответ: После передачи именованного аргумента нельзя передавать позиционные аргументы.

В Python позиционные аргументы должны идти до именованных. Вызов `f(1, b=2, 3)` нарушает это правило: после `b=2` идет позиционный `3`. Такой код приводит к ошибке вида «positional argument follows keyword argument». Остальные варианты корректны, потому что либо все позиционные, либо все именованные, либо позиционные идут перед именованными.

Подробный разбор →
1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать Python в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных