【发布时间】:2016-02-06 04:38:19
【问题描述】:
如果我不知道一个函数将传递多少个参数,我可以使用参数打包来编写函数:
def add(factor, *nums):
"""Add numbers and multiply by factor."""
return sum(nums) * factor
或者,我可以通过传递一个数字列表作为参数来避免参数打包:
def add(factor, nums):
"""Add numbers and multiply by factor.
:type factor: int
:type nums: list of int
"""
return sum(nums) * factor
使用参数包装*args 比传递数字列表有优势吗?还是有更合适的情况?
【问题讨论】:
-
这样您就不必首先传入一个结构。
-
观察调用语法。选择你喜欢的任务。
-
@IgnacioVazquez-Abrams 这样做有什么好处?将括号括在参数周围同样容易。
-
@NewWorld 如果您愿意,请执行此操作。在这种情况下,我认为后者更清楚,但YMMV。 有什么问题?
-
@NewWorld 在一般情况下很难回答 - 在您的示例中,没有任何好处。当您遇到有帮助的案例时,您就会知道!例如,当您使用继承做一些复杂的事情时,您可以使用
*args和**kwargs来消除 MRO 中不同类之间的接口差异。
标签: python parameter-passing keyword-argument