在python中使用* args而不是将列表作为参数传递的优点

时间:2010-05-18 08:13:17

标签: python

我正在浏览python,我想知道使用* args作为参数而不仅仅是将列表作为参数传递,除了美学之外有什么好处?

2 个答案:

答案 0 :(得分:2)

通常它用于将参数列表传递给通常采用固定数量参数的函数,或者用于函数定义以允许以普通参数的形式传递可变数量的参数。例如,print()函数使用varargs,以便您可以执行print(a,b,c)之类的操作。

来自最近的SO问题的一个示例:您可以使用它将range()结果列表列表传递给itertools.product(),而无需知道列表列表的长度。

当然,您可以编写每个库函数,如下所示:

def libfunc1(arglist):
    arg1 = arglist[1]
    arg2 = arglist[2]
    ...

...但是这取决于命名位置参数变量的点,它基本上正是*args为你做的事情,并且它导致多余的括号/ parens,因为你必须调用像这样的函数这样:

libfunc1([arg1val,arg2val,...])

......看起来非常类似......

libfunc1(arg1val,arg2val,...)

...除了使用不必要的字符外,与使用*args相反。

答案 1 :(得分:2)

这是灵活性

它允许您传递参数,而不知道您需要多少。一个典型的例子:

def f(some, args, here): # <- this function might accept a varying nb of args
    ...

def run_f(args, *f_args):
    do_something(args)
    # run f with whatever arguments were given:
    f(*f_args)

请务必查看**关键字版本。