Это достигается, наверное, за счёт строгого порядка передачи аргументов в функции. То есть, сначала идут обязательные аргументы, затем аргументы по умолчанию, затем синтаксический сахар, который раскрывает список (читай массив), затем синтаксический сахар, который раскрывает словарь (читай структуру)