这是不可能的,因为从该位置开始*arg
捕获所有位置参数。所以根据定义,一秒钟*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)