【发布时间】:2016-09-03 21:48:05
【问题描述】:
这是一个基本问题。做起来有区别吗
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 的一个惯用部分,即对于你所做的事情来说是一个很好的语法糖?即function 将为您处理此问题!
PS:虽然我同意这是Why use packed *args/**kwargs instead of passing list/dict? 的副本,但不确定是否有这么多反对意见,并且可能应该在重复信息中进行更正。这个问题得到了赞成。那我是不是因为找不到那个而被否决了?
【问题讨论】:
-
您可以在您的 sn-ps 中看到差异 - 第一个版本允许您传递任意位置和关键字参数,第二个版本要求您精确传递两个参数。
-
你是什么意思“无限长度”?元组和字典可以包含任意数量的元素,但您的 RAM 基本上是有限的。您可能想查看生成器和
itertools,和/或解释您要解决的实际问题是什么。 -
我会说第二个是 less 干净的,当然也不那么惯用,但是 YMMV。
-
我认为你被否决了,因为你没有正确解释你的问题。
标签: python arguments parameter-passing