如何在函数中使用*args?

vim*_*mal 1 python function args

这可能是一个基本问题,但不幸的是我在搜索时无法得到任何东西.

我有一个函数,用于*args在命令行上运行函数时捕获参数.

基本结构如下:

def func(*args):
    <code starts>
    ...
    </code ends>

func("arg1", "arg2", "arg3")
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果我在代码文件中传递参数,代码就可以工作,如上面的代码片段所示.我正在研究如何从命令行实际运行此代码,参数如下:

# python <file.py> arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

为此,我明白我应该在代码文件本身中更改'func("arg1","arg2","arg3")'行,但我不确定它是怎么回事.

有人可以指出我如何纠正这一点.

非常感谢

注意:两种解决方案都有效,是的,两者都是相同的.可惜我无法接受这两个答案.

Thi*_*ter 7

sys.argv[1:] 将为您提供所有命令行参数作为列表.

所以你可以func(*sys.argv[1:])在你的代码中接收所有的参数.但是,没有充分的理由使用varargs - 只需让函数接受一个列表argssys.argv[1:]直接传递.


Mar*_*ers 6

调用函数时,您将使用类似的语法:

func(*sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

这里列表*前面的sys.argv列表将列表扩展为单独的参数.

sys.argv列表本身包含的命令行中发现的所有参数,包括脚本的名称; 从第二个项目开始切片会为您提供在没有脚本名称的情况下传递的所有选项.