【发布时间】:2010-05-18 08:13:16
【问题描述】:
我正在使用 python,我想知道除了美观之外,使用 *args 作为参数比只传递列表作为参数有什么优势?
【问题讨论】:
标签: python
我正在使用 python,我想知道除了美观之外,使用 *args 作为参数比只传递列表作为参数有什么优势?
【问题讨论】:
标签: python
通常,它用于将参数列表传递给通常采用固定数量参数的函数,或者在函数定义中允许以普通参数的样式传递可变数量的参数。例如,print() 函数使用可变参数,以便您可以执行 print(a,b,c) 之类的操作。
最近的一个 SO 问题中的一个示例:您可以使用它将range() 结果列表的列表传递给itertools.product(),而无需知道列表列表的长度。
当然,您可以将每个库函数编写成如下所示:
def libfunc1(arglist):
arg1 = arglist[1]
arg2 = arglist[2]
...
...但这违背了命名位置参数变量的意义,它基本上正是*args 为您所做的,它会导致多余的大括号/括号,因为您必须调用这样的函数:
libfunc1([arg1val,arg2val,...])
...看起来与...非常相似
libfunc1(arg1val,arg2val,...)
...除了不必要的字符,而不是使用*args。
【讨论】:
这是为了灵活性。
它允许你传递参数,而不知道你需要多少。一个典型的例子:
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)
请务必查看 ** 关键字版本。
【讨论】: