Вопрос №55497 от пользователя Muhammed Dinaev в уроке «Встроенные map, filter, reduce», курс «Python: Функции»

Muhammed Dinaev

https://ru.hexlet.io/code_reviews/418415

Добрый день!

Не могу понять почему тесты не проходят. Я прогнал все те же тесты в IDE и все работает.

5 0

Muhammed Dinaev

''Аргумент *args в определении функции пишется после всех обычных позиционных аргументов перед первым аргументом со значением по умолчанию, а **kwargs пишется в самом конце, после последнего аргумента со значением по умолчанию. Давайте определим функцию, которая принимает все виды аргументов:

def f(x, y, *args, kx=None, ky=42, **kwargs): ... return (x, y, args, kx, ky, kwargs) ... f(1, 2, 3, 4, kx='a', ky='b', kz='c') (1, 2, (3, 4), 'a', 'b', {'kz': 'c'})''

Вопрос, почему в тестах порядок kwargs и *args наоборот? битый час не мог понять в чем дело пока в определении функции не переставил местами на walk(kwargs, *args).

0

Muhammed Dinaev

При том, что если в Pycharm сделать такую перестановку все рушится с ошибкой (list indices must be integers or slices, not str)

0

Aleksei Pirogov

Мухаммед Динаев,

Вопрос, почему в тестах порядок kwargs и *args наоборот? битый час не мог понять в чем дело пока в определении функции не переставил местами на walk(kwargs, *args).

В тестах вообще нет никаких *args и **kwargs. И в задании нет.

Синтаксис *args/**kwargs предназначен для описания функций, которые работают с произвольными наборами аргументов. По заданию же функция walk должна работать со словарём и списком - с двумя конкретными аргументами ровно в таком порядке.

0

Muhammed Dinaev

Почему бы тогда не писать универсально правильные структуру передачи аргументов в соответствии с тем, материалом, который был подан. Потому что тестовые вопросы ничего не говорят про произвольные наборы аргументов. Вот пример. https://cloud.mail.ru/public/13bK/hDffMyvnA

И еще, почему от перестановки рушится код в Pycharm.

0

Aleksei Pirogov

Потому что тестовые вопросы ничего не говорят про произвольные наборы аргументов.

Перечитайте про "переменное количество аргументов" и "получение именованных аргументов в виде словаря".

И еще, почему от перестановки рушится код в Pycharm.

Вы меняете местами имена аргументов функции, но функция-то вызывается с позиционными аргументами. От того, что вы переставили args вперёд, список не станет передаваться первым аргументом, а словарь вторым.

Почему бы тогда не писать универсально правильные структуру передачи аргументов в соответствии с тем, материалом, который был подан.

Что такое "универсально правильные структуры передачи аргументов"?

Вы предлагаете любой аргумент, который принимает словарь, называть kwargs, а тот, что принимает список, называть args?

Это не имеет смысла, потому что "args" переводится как "аргументы", а "kwargs" как "именованные аргументы" и эти имена должны использоваться только тогда, когда функция ожидает переменное количество аргументов и не может дать имя каждому.

Использовать же абстрактное имя "args" вместо конкретного "path" в walk() это уже просто плохой стиль именования.

Более того, использовать имена args и kwargs, как это делаете вы, в принципе не следует: любой разработчик на Python ожидает видеть эти аргументы строго в виде *args и **kwargs, но никак не в качестве имён для одиночных аргументов, как в вашей функции walk(args, kwargs).

1

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
18 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
18 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
18 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
18 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
18 мая 5 месяцев