Lesson 3#3
Conversation
| # print(new_filter(func, *[-3, -1, 0, 3, 7, -5])) | ||
| # а вот это нет: | ||
| # print(new_filter(func, [-3, -1, 0, 3, 7, -5])) | ||
| # Спасибо. No newline at end of file |
There was a problem hiding this comment.
Когда ты передаешь [1, 2, 3] в *args, он это видит как 1 аргумент - лист из 3х элементов. Почему бы и нет? Списки такие же равноправные объекты как и просто числа. Попробуй вывести arg в начале new_filter. Увидишь ([1, 2, 3], ). То есть при итерации в 17 строчке - ты итерируешь по кортежу , в котором есть 1 элемент - список. И следом неправильно срабатывает func(), потому что не ожидает на вход получить список.
Чтобы отличить моменты, когда список является аргументом от коллекции аргументов используют символ *
There was a problem hiding this comment.
Доброго времени суток.
если у меня вот такой код:
def new_filter(func_name, *args):
...
digs = [-3, -1, 0, 3, 7, -5]
print(new_filter(func, *digs))
то я получаю на входе функции вот это:
args --> (-3, -1, 0, 3, 7, -5)
type(args) --> <class 'tuple'>
усли же звездочки нет:
def new_filter(func_name, args):
...
digs = [-3, -1, 0, 3, 7, -5]
print(new_filter(func, digs))
то на входе функции вот это:
args --> [-3, -1, 0, 3, 7, -5]
type(args) --> <class 'list'>
Получается "*" меняет список на кортеж.
Зачем это делать я пока что не могу понять.
ДЗ лекция 3