Python *args、**kwargs与使用tuple和dict调用有什么区别?

Python *args、**kwargs与使用tuple和dict调用有什么区别?,python,arguments,parameter-passing,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 mytupl

这是一个基本问题。这样做有区别吗

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)
我可以用这两种方法做同样的事情,只是后者有一个奇怪的惯例,即创建
元组
字典
。但基本上有区别吗?我可以解决处理无限事物的相同计算问题,因为
dict
tuple
可以为我解决这个问题吗

这更像是Python的惯用部分吗?也就是说,对于您所做的事情来说,这是一种很好的语法糖分吗?即
函数
将为您处理此问题


PS:我不确定会有这么多的反对票,尽管我同意这是一份副本,可能应该在副本信息中更正。这个问题已经获得了更多的选票。那么,我是不是因为找不到而被否决了?

args
kwargs
只是名字而已。
这里真正重要的是
*
**


在第二个示例中,您只能使用2个参数调用函数,而在第一个示例中,您可以使用基本上无限的参数调用函数。

您可以在代码段中看到不同之处-第一个版本允许您传递任意位置参数和关键字参数,第二个要求你精确地传递两个参数。你说的“无限长”是什么意思?元组和字典可以包含任意数量的元素,但RAM基本上是有限的。您可能想查看生成器和itertools,和/或解释您试图解决的实际问题。我想说的是,第二个问题不太干净,当然也不太惯用,但是YMMV。我想你被否决了,因为你没有正确地解释你的问题。但是用元组和字典来称呼它的惯例实际上解决了我得到无限项的问题。不?@Nishant:
foo(*序列,**映射)
@Nishant不。这里没有魔法。实际上,您应该避免使用名称
元组
,因为它会隐藏内置名称。@DeepSpace:调用函数时,它们在寻找相同的语法。他们想传入任意数量的参数。@MartijnPieters创建元组dict和调用它有根本区别吗?def foo(*args,**kwargs):传递方便的合成糖吗?