Обновить
1
0
Анатолий Максимов@tolord

Аналитик

Отправить сообщение

1) Если ты напишешь print_scores(arg1, arg2, ..., argN, *scores), предполагается, что у тебя N аргументов обязательные, а остальные опциональные, и эти остальные соберутся в отдельный кортеж. То есть конструкция func(arg, *args1, *args2) невозможна, потому что непонятно, как поделить остальные переменные между args1 и args2. Если тебе хочется получить два списка аргументов, лучше явно запихни их в списки (fun(arg1=(1, 2, 3), arg2=(4, 5, 6)))


Писать *a = [1, 2, 3] нельзя, потому что * это операция распаковки, а не обращение к указателю как в C++. Даже если предположить, что такая конструкция имела бы место, это было бы сильно не pythonic way, потому что гораздо проще и понятнее то, что ты написал: a = [[1, 2, 3]].


2) Двойная звёздочка это не двойная распаковка. Это сборка именованных параметров в словарь и наоборот. Одинарная звёздочка на словарь вернёт тебе список ключей. Например,


def fun(*args):
    print(', '.join(args))

fun(*{'kek': 4, 'lol': 8, 'cheburek': 15})

напечатает на экране: kek, lol, cheburek. Логика «двойной оператор это то же самое, что два одинарных» не работает, потому что есть же разница между = и ==.


UPD: Коллега ниже отметил, что звезда собирает аргументы в кортеж, исправил оговорку.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность