can you pass variadic arguments after named parameters?
Python 3.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(*values, bob="Hi bob", sally="Hello sally")
function(bob="Hi bob", *values, sally="Hello sally")
产生
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
如您所见,您可以调用函数以您喜欢的任何顺序放置参数.
由于您明确地引用了实例方法,因此如果函数是一种方法(比如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")
仍在工作和生产
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
Python 2.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)