是否可以使用named和variadic参数在python 2.7中调用实例方法?我喜欢命名参数以便更清楚地读取代码,但似乎这段代码失败了:
def function(bob, sally, *args):
pass
values = [1, 2, 3, 4]
function(bob="Hi bob", sally="Hello sally", *values)
Run Code Online (Sandbox Code Playgroud)
你可以在命名参数后传递可变参数吗?
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")
Run Code Online (Sandbox Code Playgroud)
产生
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以调用函数以您喜欢的任何顺序放置参数.
因为你明确地引用了实例方法,所以如果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")
Run Code Online (Sandbox Code Playgroud)
仍在工作和生产
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
(1, 2, 3, 4) Hi bob Hello sally
Run Code Online (Sandbox Code Playgroud)
Python 2.7.6:答案是否定的.
>>> def function(*args, bob, sally):
File "<stdin>", line 1
def function(*args, bob, sally):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
另一种方法可以是为可变参数赋予名称
values = {'p1': 1, 'p2': 2, 'p3': 3, 'p4': 4}
Run Code Online (Sandbox Code Playgroud)
然后你可以定义
def function(bob, sally, **kwargs):
print(kwargs['p1'])
Run Code Online (Sandbox Code Playgroud)
并称之为
function(bob="Hi bob", sally="Hello sally", **values)
Run Code Online (Sandbox Code Playgroud)