* args,** kwargs vs使用元组和dict调用有什么区别?

时间:2016-05-09 09:55:21

标签: python arguments parameter-passing

这是一个基本问题。这样做有什么不同

def foo(*args, **kwargs):
    """standard function that accepts variable length."""
    # do something

foo(v1...vn, nv1=nv1...nvn=nvn)

def foo(arg, kwargs):
    """convention, call with tuple and dict."""
    # do something

mytuple = (v1, ..vn)
mydict = {nv1=nv1, ...nvn=nvn}
foo(mytuple, mydict)

我可以对两者做同样的事情,除了后者有一个创建tupledictionary的奇怪惯例。但基本上有区别吗?我可以解决处理无限事物的相同计算问题,因为dicttuple可以为我处理这个问题吗?

这更像是Python的惯用部分,但对于你所做的事情来说,这是一个很好的 Syntactic Sugar 吗? I.e function将为你处理这个问题!

PS:虽然我同意这是Why use packed *args/**kwargs instead of passing list/dict?的副本,但不确定有这么多的downvotes,可能应该在重复的信息中予以纠正。这个问题已经收到了赞成票。那么我是因为无法找到它而被投票?

1 个答案:

答案 0 :(得分:1)

argskwargs只是名字 这里真正重要的是***

在你的第二个例子中,你只能调用带有2个参数的函数,而第一个例子是你可以用基本无限的参数调用函数。