can you pass variadic arguments after named parameters?
python3.4.3:答案是肯定的。在
必须将变量放在函数定义的第一位def function(*args, bob, sally):
print(args, bob, sally)
values = [1, 2, 3, 4]
function(bob="Hi bob", sally="Hello sally", *values)
function(bob="Hi bob", *values, sally="Hello sally")
function(*values, bob="Hi bob", sally="Hello sally")
生产
^{pr2}$
如您所见,您可以调用函数,以您喜欢的任何顺序放置参数。在
请注意:
只有当您通过valuesiterable传递位置参数,并对其内容进行解压缩时,上面的第一个和第二个调用才有效。在
传递每个位置参数function(bob="Hi bob", sally="Hello sally", 1, 2, 3, 4)
function(bob="Hi bob", 1, 2, 3, 4, sally="Hello sally")
不可接受并产生SyntaxError: positional argument follows keyword argument
此外,由于您显式地引用实例方法,因此有必要检查如果function是这样一个方法,比如说类A,会发生什么class A():
def function(self, *args, bob, sally):
print(args, bob, sally)
values = [1, 2, 3, 4]
a=A()
a.function(bob="Hi bob", sally="Hello sally", *values)
a.function(*values, bob="Hi bob", sally="Hello sally")
a.function(bob="Hi bob", *values, sally="Hello sally")
仍然在工作和生产
^{pr2}$
Python2.7.6:答案是否定的>>> def function(*args, bob, sally):
File "", line 1
def function(*args, bob, sally):
^
SyntaxError: invalid syntax
另一种方法是给可变参数起一个名字values = {'p1': 1, 'p2': 2, 'p3': 3, 'p4': 4}
然后你可以定义def function(bob, sally, **kwargs):
print(kwargs['p1'])
用它来称呼它function(bob="Hi bob", sally="Hello sally", **values)