我正在浏览python,我想知道使用* args作为参数而不仅仅是将列表作为参数传递,除了美学之外有什么好处?
答案 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)
请务必查看**
关键字版本。