在python中,可以在命名参数之后传递变量参数吗?

在python中,可以在命名参数之后传递变量参数吗?,python,python-2.7,Python,Python 2.7,在Python2.7中,是否可以同时使用命名参数和可变参数调用实例方法?我喜欢命名参数,以便更清晰地阅读代码,但这段代码似乎失败了: def function(bob, sally, *args): pass values = [1, 2, 3, 4] function(bob="Hi bob", sally="Hello sally", *values) 是的,但是对你正在做的事情稍加修改: def foo(bob="abc", sally="def", **kwargs):

在Python2.7中,是否可以同时使用命名参数和可变参数调用实例方法?我喜欢命名参数,以便更清晰地阅读代码,但这段代码似乎失败了:

def function(bob, sally, *args):
    pass

values = [1, 2, 3, 4]

function(bob="Hi bob", sally="Hello sally", *values)

是的,但是对你正在做的事情稍加修改:

def foo(bob="abc", sally="def", **kwargs):
    pass

foo(bob="stuff", sally="buff", other_stuff=[1, 2, 3])
能否在命名参数后传递变量参数

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(bob="Hi bob", *values, sally="Hello sally")
function(*values, bob="Hi bob", 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
如您所见,您可以调用函数,将参数按您喜欢的任何顺序放置

请注意:

只有通过
values
iterable传递位置参数并解压缩其内容时,上述第一个和第二个调用才有效

传递每个位置参数

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
(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")
仍然工作和生产

SyntaxError: positional argument follows keyword argument
(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 "<stdin>", line 1
    def function(*args, bob, sally):
                          ^
SyntaxError: invalid syntax
然后你可以定义

def function(bob, sally, **kwargs):
    print(kwargs['p1'])
并称之为

function(bob="Hi bob", sally="Hello sally", **values)

怎么会失败?错误是什么?
TypeError:function()为参数“bob”获取了多个值
,但现在您必须执行
args=kwargs['other_stuff']
同意,但OP说他们喜欢命名参数。这里唯一的注释是OP说他们喜欢命名参数,所以kwargs可能更适合这个特殊情况。啊,谢谢@Pynchia,你也应该在你的答案中加入这一点,这是一个很好的解释。:)