在Python中使用*args而不是传递列表作为参数的优点
我正在学习Python,想知道使用*args作为参数有什么好处,除了看起来更好看之外,和直接传一个列表作为参数相比有什么不同?
2 个回答
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)
记得查看一下**
这个关键字的用法。
3
一般来说,这个东西用来把一堆参数传给一个本来只接受固定数量参数的函数,或者在定义函数的时候,让它可以接受不定数量的参数,就像平常传参数那样。比如,print()
函数就用了这个功能,所以你可以像这样使用:print(a,b,c)
。
最近在StackOverflow上有个例子:你可以用它把一系列从 range()
得到的结果列表传给 itertools.product()
,而不需要知道这些列表的长度。
当然,你可以把每个库函数都写成这样:
def libfunc1(arglist):
arg1 = arglist[1]
arg2 = arglist[2]
...
...但这样就失去了使用命名参数的意义,实际上 *args
就是为你做这个的,而且这样会多出很多不必要的括号,因为你得像这样调用函数:
libfunc1([arg1val,arg2val,...])
...这看起来和...
libfunc1(arg1val,arg2val,...)
...很相似,只是多了些没必要的字符,而用 *args
就简单多了。