这是一个基本问题。这样做有什么不同
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)
我可以对两者做同样的事情,除了后者有一个创建tuple
和dictionary
的奇怪惯例。但基本上有区别吗?我可以解决处理无限事物的相同计算问题,因为dict
和tuple
可以为我处理这个问题吗?
这更像是Python的惯用部分,但对于你所做的事情来说,这是一个很好的 Syntactic Sugar 吗? I.e function
将为你处理这个问题!
PS:虽然我同意这是Why use packed *args/**kwargs instead of passing list/dict?的副本,但不确定有这么多的downvotes,可能应该在重复的信息中予以纠正。这个问题已经收到了赞成票。那么我是因为无法找到它而被投票?
答案 0 :(得分:1)
args
和kwargs
只是名字
这里真正重要的是*
和**
。
在你的第二个例子中,你只能调用带有2个参数的函数,而第一个例子是你可以用基本无限的参数调用函数。