我知道这很有效:
def locations(city, *other_cities):
print(city, other_cities)
现在我需要两个变量参数列表,比如
def myfunction(type, id, *arg1, *arg2):
# do somethong
other_function(arg1)
#do something
other_function2(*arg2)
但是Python不允许使用这两次
答案 0 :(得分:11)
这是不可能的,因为*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
时,你可以使用任何 iterable,甚至是一个生成器,因为被调用的函数永远不会与传递的iterables接触。
如果您真的想使用两个变量参数列表,则需要某种分隔符。以下代码使用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)
答案 1 :(得分:1)
您可以使用两个词典。