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

4 投票
2 回答
953 浏览
提问于 2025-04-15 22:50

我正在学习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 就简单多了。

撰写回答