Это не магия, а преобразование массива в параметры.
def func(a,b,c)
print(a,b,c)
a=[1,2,3]
func(*a)
Также есть еще одна магия с двумя **.
Действует как именованные параметры для dict.
a=dict(a=1,b=2,c=3)
func(**a)
Немного добавлю.
* - оператор раскрытия списка (list) или типла (tuple) в аргументы функции. Последовательность аргументов должна соответствовать последовательности списка.
** - оператор раскрытия словаря в именованные аргументы функции.