def func(*v, **k): pass
func(**{'a': 1}, *(1, 2, 3)) # ERROR...
func(a=1, *(1, 2, 3)) # OK...
Я не понимаю, почему это первое не работает, а второе делает.Смешивание * vargs и ** kargs аргументы в вызове функции
Кто-то может просто сказать «потому что реализация говорит так», но я также хотел бы знать , почему реализация говорит так. Не удалось ли реализовать перевод первого ко второму, чтобы заставить этот вызов работать?
Вторыми работает только тогда, когда 'a', является четвёртым определенным параметром. – chepner
Вы можете использовать 'func (* (1, 2, 3), ** {'a': 1})'. В грамматике просто указывается, что '* args' идет до' ** kwargs'. Зачем? Потому что это не имеет значения, поэтому они просто выбрали один заказ. –
@SvenMarnach Mmmmh .... Не существует ли за этим решением проблемы с производительностью? – zer0uno