Это невозможно, потому что *arg
захватывает все позиционные args с этого положения сверху. Поэтому по определению второй *args2
всегда будет пустым.
Простое решение будет прохождение двух кортежей:
def myfunction(type, id, args1, args2):
other_function(args1)
other_function2(args2)
и называют это так:
myfunction(type, id, (1,2,3), (4,5,6))
В случае две функции используют позиционные аргументы вместо одного аргумента, вы бы назвали их вот так:
def myfunction(type, id, args1, args2):
other_function(*arg1)
other_function2(*arg2)
Это будет иметь то преимущество, что вы можете использовать любой итерируемый, даже генератор, при вызове myfunction
, так как вызываемые функции никогда не будут соприкасаться с переданными итерами.
Если вы действительно хотите работать с двумя списками переменных аргументов, вам нужен какой-то разделитель. Следующий код использует None
в качестве разделителя:
import itertools
def myfunction(type, id, *args):
args = iter(args)
args1 = itertools.takeuntil(lambda x: x is not None, args)
args2 = itertools.dropwhile(lambda x: x is None, args)
other_function(args1)
other_function2(args2)
Он будет использоваться как это:
myfunction(type, id, 1,2,3, None, 4,5,6)
Можете ли вы привести пример того, как вы хотите вызвать функцию? –
Как бы Python знал, должен ли аргумент быть в 'arg1' или' arg2', если оба являются переменными? –