Если у меня есть функция вроде:
def f(a,b,c,d):
print a,b,c,d
Тогда почему это работает:
f(1,2,3,4)
f(*[1,2,3,4])
Но не это:
f(*[1,2] , *[3,4])
f(*[1,2] , *[3,4])
^
SyntaxError: invalid syntax
?
EDIT: Для информации исходная проблема заключалась в замене одного из аргументов в оболочке функции. Я хотел заменить данный член введенных * args и попробовал что-то вроде:
def vectorize_pos(f,n=0):
'''
Decorator, vectorize the processing of the nth argument
:param f: function that dont accept a list as nth argument
'''
def vectorizedFunction(*args,**kwargs):
if isinstance(args[n],list):
return map(lambda x : f( *(args[:n]) , x , *(args[n+1,:]), **kwargs),args[n])
else:
return f(*args,**kwargs)
return vectorizedFunction
То, откуда возник вопрос. И я знаю, что есть другой способ сделать то же самое, но только хотел понять, почему распаковка одной последовательности сработала, но не для большего.